{
  "contractName": "ConverterBase",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "_type",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "contract IConverterAnchor",
          "name": "_anchor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_activated",
          "type": "bool"
        }
      ],
      "name": "Activation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_fromToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_toToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_trader",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_return",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "_conversionFee",
          "type": "int256"
        }
      ],
      "name": "Conversion",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_prevFee",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newFee",
          "type": "uint32"
        }
      ],
      "name": "ConversionFeeUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_prevOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_token1",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20Token",
          "name": "_token2",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rateN",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_rateD",
          "type": "uint256"
        }
      ],
      "name": "TokenRateUpdate",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anchor",
      "outputs": [
        {
          "internalType": "contract IConverterAnchor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionWhitelist",
      "outputs": [
        {
          "internalType": "contract IWhitelist",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "conversionsEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxConversionFee",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "newOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "onlyOwnerCanUpdateRegistry",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prevRegistry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveRatio",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "reserveTokens",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "name": "reserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "weight",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "deprecated1",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "deprecated2",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isSet",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "restoreRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_onlyOwnerCanUpdateRegistry",
          "type": "bool"
        }
      ],
      "name": "restrictRegistryUpdate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "converterType",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "targetAmountAndFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "withdrawETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isV28OrHigher",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IWhitelist",
          "name": "_whitelist",
          "type": "address"
        }
      ],
      "name": "setConversionWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferAnchorOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptAnchorOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawFromAnchor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_conversionFee",
          "type": "uint32"
        }
      ],
      "name": "setConversionFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "reserveTokenCount",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_weight",
          "type": "uint32"
        }
      ],
      "name": "addReserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveWeight",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_reserveToken",
          "type": "address"
        }
      ],
      "name": "reserveBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "hasETHReserve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_trader",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "convert",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IConverterAnchor",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferTokenOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptTokenOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "connectors",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "connectorTokens",
      "outputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connectorTokenCount",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_connectorToken",
          "type": "address"
        }
      ],
      "name": "getConnectorBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20Token",
          "name": "_sourceToken",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Token",
          "name": "_targetToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "getReturn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"_type\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"contract IConverterAnchor\",\"name\":\"_anchor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_activated\",\"type\":\"bool\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_fromToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_toToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_return\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_conversionFee\",\"type\":\"int256\"}],\"name\":\"Conversion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_prevFee\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_newFee\",\"type\":\"uint32\"}],\"name\":\"ConversionFeeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateN\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateD\",\"type\":\"uint256\"}],\"name\":\"TokenRateUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_weight\",\"type\":\"uint32\"}],\"name\":\"addReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchor\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"connectorTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionWhitelist\",\"outputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionsEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"converterType\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_connectorToken\",\"type\":\"address\"}],\"name\":\"getConnectorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"getReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasETHReserve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isV28OrHigher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onlyOwnerCanUpdateRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevRegistry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reserveTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveWeight\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"weight\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"deprecated1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"deprecated2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restoreRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_onlyOwnerCanUpdateRegistry\",\"type\":\"bool\"}],\"name\":\"restrictRegistryUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_conversionFee\",\"type\":\"uint32\"}],\"name\":\"setConversionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setConversionWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"targetAmountAndFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromAnchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"ConverterBase The converter contains the main logic for conversions between different ERC20 tokens. It is also the upgradable part of the mechanism (note that upgrades are opt-in). The anchor must be set on construction and cannot be changed afterwards. Wrappers are provided for some of the anchor's functions, for easier access. Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller and can execute any of its functions. To upgrade the converter, anchor ownership must be transferred to a new converter, along with any relevant data. Note that the converter can transfer anchor ownership to a new converter that doesn't allow upgrades anymore, for finalizing the relationship between the converter and the anchor. Converter types (defined as uint16 type) - 0 = liquid token converter 1 = liquidity pool v1 converter 2 = liquidity pool v2 converter Note that converters don't currently support tokens with transfer fees.\",\"events\":{\"Activation(uint16,address,bool)\":{\"details\":\"triggered when the converter is activated\",\"params\":{\"_activated\":\"true if the converter was activated, false if it was deactivated\",\"_anchor\":\"converter anchor\",\"_type\":\"converter type\"}},\"Conversion(address,address,address,uint256,uint256,int256)\":{\"details\":\"triggered when a conversion between two tokens occurs\",\"params\":{\"_amount\":\"amount converted, in the source token\",\"_conversionFee\":\"conversion fee\",\"_fromToken\":\"source ERC20 token\",\"_return\":\"amount returned, minus conversion fee\",\"_toToken\":\"target ERC20 token\",\"_trader\":\"wallet that initiated the trade\"}},\"ConversionFeeUpdate(uint32,uint32)\":{\"details\":\"triggered when the conversion fee is updated\",\"params\":{\"_newFee\":\"new fee percentage, represented in ppm\",\"_prevFee\":\"previous fee percentage, represented in ppm\"}},\"TokenRateUpdate(address,address,uint256,uint256)\":{\"details\":\"triggered when the rate between two tokens in the converter changes note that the event might be dispatched for rate updates between any two tokens in the converter note that prior to version 28, you should use the 'PriceDataUpdate' event instead\",\"params\":{\"_rateD\":\"rate of 1 unit of `_token1` in `_token2` (denominator)\",\"_rateN\":\"rate of 1 unit of `_token1` in `_token2` (numerator)\",\"_token1\":\"address of the first token\",\"_token2\":\"address of the second token\"}}},\"kind\":\"dev\",\"methods\":{\"acceptAnchorOwnership()\":{\"details\":\"accepts ownership of the anchor after an ownership transfer most converters are also activated as soon as they accept the anchor ownership can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead\"},\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"acceptTokenOwnership()\":{\"details\":\"deprecated, backward compatibility\"},\"addReserve(address,uint32)\":{\"details\":\"defines a new reserve token for the converter can only be called by the owner while the converter is inactive\",\"params\":{\"_token\":\"address of the reserve token\",\"_weight\":\"reserve weight, represented in ppm, 1-1000000\"}},\"connectorTokenCount()\":{\"details\":\"deprecated, backward compatibility\"},\"connectorTokens(uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"connectors(address)\":{\"details\":\"deprecated, backward compatibility\"},\"constructor\":{\"details\":\"used by sub-contracts to initialize a new converter\",\"params\":{\"_anchor\":\"anchor governed by the converter\",\"_maxConversionFee\":\"maximum conversion fee, represented in ppm\",\"_registry\":\"address of a contract registry contract\"}},\"convert(address,address,uint256,address,address)\":{\"details\":\"converts a specific amount of source tokens to target tokens can only be called by the bancor network contract\",\"params\":{\"_amount\":\"amount of tokens to convert (in units of the source token)\",\"_beneficiary\":\"wallet to receive the conversion result\",\"_sourceToken\":\"source ERC20 token\",\"_targetToken\":\"target ERC20 token\",\"_trader\":\"address of the caller who executed the conversion\"},\"returns\":{\"_0\":\"amount of tokens received (in units of the target token)\"}},\"getConnectorBalance(address)\":{\"details\":\"deprecated, backward compatibility\"},\"getReturn(address,address,uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"hasETHReserve()\":{\"details\":\"checks whether or not the converter has an ETH reserve\",\"returns\":{\"_0\":\"true if the converter has an ETH reserve, false otherwise\"}},\"isActive()\":{\"details\":\"returns true if the converter is active, false otherwise\",\"returns\":{\"_0\":\"true if the converter is active, false otherwise\"}},\"isV28OrHigher()\":{\"details\":\"checks whether or not the converter version is 28 or higher\",\"returns\":{\"_0\":\"true, since the converter version is 28 or higher\"}},\"reserveBalance(address)\":{\"details\":\"returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve balance\"}},\"reserveTokenCount()\":{\"details\":\"returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead\",\"returns\":{\"_0\":\"number of reserve tokens\"}},\"reserveWeight(address)\":{\"details\":\"returns the reserve's weight added in version 28\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve weight\"}},\"restoreRegistry()\":{\"details\":\"restores the previous contract-registry\"},\"restrictRegistryUpdate(bool)\":{\"details\":\"restricts the permission to update the contract-registry\",\"params\":{\"_onlyOwnerCanUpdateRegistry\":\"indicates whether or not permission is restricted to owner only\"}},\"setConversionFee(uint32)\":{\"details\":\"updates the current conversion fee can only be called by the contract owner\",\"params\":{\"_conversionFee\":\"new conversion fee, represented in ppm\"}},\"setConversionWhitelist(address)\":{\"details\":\"allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract\",\"params\":{\"_whitelist\":\"address of a whitelist contract\"}},\"token()\":{\"details\":\"deprecated since version 28, backward compatibility - use only for earlier versions\"},\"transferAnchorOwnership(address)\":{\"details\":\"transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead\",\"params\":{\"_newOwner\":\"new token owner\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"transferTokenOwnership(address)\":{\"details\":\"deprecated, backward compatibility\"},\"updateRegistry()\":{\"details\":\"updates to the new contract-registry\"},\"upgrade()\":{\"details\":\"upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade\"},\"withdrawETH(address)\":{\"details\":\"withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve\",\"params\":{\"_to\":\"address to send the ETH to\"}},\"withdrawFromAnchor(address,address,uint256)\":{\"details\":\"withdraws tokens held by the anchor and sends them to an account can only be called by the owner\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}},\"withdrawTokens(address,address,uint256)\":{\"details\":\"withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}}},\"stateVariables\":{\"version\":{\"details\":\"version number\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":\"ConverterBase\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol\":{\"keccak256\":\"0x65b5780d710159c7540078c38406c53db37a349fb468a0bf21bdc6262e497951\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3df931a12770d10a22451326e38ae9d405d3e2716bdbdd6306b5e2361f6fe511\",\"dweb:/ipfs/QmcRBSaFLz516dAEqb8ZEiyx8ZTHZZ6rfxHn5roL2fHA3S\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":{\"keccak256\":\"0x242211f471f27635fa98bdeed238429942c55fc9a5e824c1a30cd88fad727f9b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f9769299a5e13c363d102c4c08b09e3a87ec053124dcc157be0a6448c13e3320\",\"dweb:/ipfs/QmUC2CaAr6emVkJN62xXBY83r1f7Hxj62UAavZsCSWcqUb\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol\":{\"keccak256\":\"0xf30c95034af4c4ec6e8a859e90cf7a0bada29a805ede76e04644107a7c677c4e\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b48070d4abf9c4a08c39e6c494fa9efd7389aa7f8b61b283c9ba02062b1c59b6\",\"dweb:/ipfs/Qme6U7SpspFPzMH2mTyKsXCnJEAgg1vX6NNFzuykbVSY5R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol\":{\"keccak256\":\"0x18b0d73a3d5ee951ede1b3f840ed35b40570e34975703079a4451555f4dd089b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1cd7263f1ef60793e3929509150420037df9a1194c3d0f40bb2ff5516d6a373f\",\"dweb:/ipfs/QmNUbsZt2rzWPjStYycgz3vMbNP4VrAqZPRAK39QNqUoos\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol\":{\"keccak256\":\"0x9448cdbe90293fb5c1a0808b77af8754a1025b59c45f432eee01f659361a6115\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1ef2bb2e1543c9324daf7f3fd086a57efb45b89f3d62b9d7a9fc78c138d24dbc\",\"dweb:/ipfs/QmVcXDib3K6xYJMBNxawmo4krJGiDfxb5oL64Lc3pi14XK\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol\":{\"keccak256\":\"0x456faf61358bfd76498892509cc99f9729f310c9450e28b0d03b5e7cd9752802\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://01f7b3f24cc895a948ea44f8e067d312b55ef1e9cf491908f3fb948d02b914da\",\"dweb:/ipfs/QmfSwZrWFWmT8xeX3iwSq75Vs8pQaQBGkmxJEHehUiPP1N\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IERC20Token.sol\":{\"keccak256\":\"0xe6f988c3156e88258474526a541d5a42b6a9adae98b04177a059d9f723bc82cd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9a6eb77a5b9ce70995a11a6e48ac3985a4c70896fe5fe04d46146ad7c1c83ea3\",\"dweb:/ipfs/QmYvGSveZFG51tghwkVuu6eK9Jy8frHpfLxHTMyvNZN461\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol\":{\"keccak256\":\"0x6ed324da616d70af0b21fa073b1e5329b430e38b470177633a69710eff3da893\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://44f94aa59c67de636423cbdef82efb7d8e0562e73dfc9049a48054156aebaf14\",\"dweb:/ipfs/Qmdn8KAP54s7X3J6TCoZPhCpS19aCQzFYZuFABugJ5JA5D\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":{\"keccak256\":\"0x74caf88eff1cb113ad8277df9ba7933a6f1e0deea8fd1855157def3be833b859\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://c7793c9f245736cd8413bc8c4b5c40b67949cbee32289a16d29c83cf59396ad6\",\"dweb:/ipfs/QmWony7b1buUrGnE32gjLAnSwkBYMrJ68vUcCwDMmp3MbJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol\":{\"keccak256\":\"0x5ea87c10dd6e7e79212da712eb5f079c03361e6c96e299a4ffd9aaee8d6a3899\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://882aac64a791df35a942480e6ce611d1acb399af4ac0c4ef0288965c3785bf50\",\"dweb:/ipfs/QmeWeYYFh5HZAzJ1SzPHoTcPvZrE4NPUVfmjvH9Q3m36Gg\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":{\"keccak256\":\"0x1ab7391a19ca8a3ad2f3c4a1074e080d4d76dfdb834637bdd0c1e6b6acdf28af\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://d6d8c99621ca884b72da2d84eddfec8ec8c5533915691d6eec94a07adf445608\",\"dweb:/ipfs/QmaXr6DN7VbfxfMn3PsTy7SAMgZVVXbdeaw11BsAjVL2x1\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol\":{\"keccak256\":\"0xf65b87e3bf3343e368da67878c19d1a043a1025b10e9053d3562b53b4aa447fe\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b85c5d96642c14c53b8d5062eecd4d27d3bdb457d1d0f130900763a75a512eb7\",\"dweb:/ipfs/QmUHtbqC1khqnRZXYn11Aykus4m5e9MVNUWqorxhpr5ipJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol\":{\"keccak256\":\"0xac6bc102eff6c1bb8c1bb4466eab50322c7c101e2e33d577dd3035f106627577\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9fdbda2d4509260ca3dd43654bdaea07ef18a5e04213ff16e38e3b4abad78a5f\",\"dweb:/ipfs/QmPb69rzX1DwDeEhhfzqQNS3U2bfGcFjXNaV5ffHsZHzfP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/ITokenHolder.sol\":{\"keccak256\":\"0x9ccb8ab04d0bd874ba7aae5277e60f35c36918922649a0596bf3664ed257bfe2\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b65e6db19cd244c9f3545695de5fd7573711c49fb306631ddbf0e1d2fa9fb589\",\"dweb:/ipfs/QmZeu5KYVMTbTx7h2BVUq52fpwL9Q44AUfzeVksucDohgf\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IWhitelist.sol\":{\"keccak256\":\"0x356ad553ceeaea04d7cb8f0d6a5663c47dfccb2bd82517348128f032416ee34a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9ea3bbb9945144ead2c1392351f2f9f7444af78569f2b95da2e68bb6b919db52\",\"dweb:/ipfs/QmPyUAk44Kj7nJB4tzYqeSXWHyYP51mRNynEmWra9m4eKS\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./interfaces/IConverter.sol\";\r\nimport \"./interfaces/IConverterAnchor.sol\";\r\nimport \"./interfaces/IConverterUpgrader.sol\";\r\nimport \"./interfaces/IBancorFormula.sol\";\r\nimport \"../utility/ContractRegistryClient.sol\";\r\nimport \"../utility/ReentrancyGuard.sol\";\r\nimport \"../utility/SafeMath.sol\";\r\nimport \"../utility/TokenHandler.sol\";\r\nimport \"../utility/TokenHolder.sol\";\r\nimport \"../token/interfaces/IEtherToken.sol\";\r\nimport \"../bancorx/interfaces/IBancorX.sol\";\r\n\r\n/**\r\n  * @dev ConverterBase\r\n  *\r\n  * The converter contains the main logic for conversions between different ERC20 tokens.\r\n  *\r\n  * It is also the upgradable part of the mechanism (note that upgrades are opt-in).\r\n  *\r\n  * The anchor must be set on construction and cannot be changed afterwards.\r\n  * Wrappers are provided for some of the anchor's functions, for easier access.\r\n  *\r\n  * Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\r\n  * and can execute any of its functions.\r\n  *\r\n  * To upgrade the converter, anchor ownership must be transferred to a new converter, along with\r\n  * any relevant data.\r\n  *\r\n  * Note that the converter can transfer anchor ownership to a new converter that\r\n  * doesn't allow upgrades anymore, for finalizing the relationship between the converter\r\n  * and the anchor.\r\n  *\r\n  * Converter types (defined as uint16 type) -\r\n  * 0 = liquid token converter\r\n  * 1 = liquidity pool v1 converter\r\n  * 2 = liquidity pool v2 converter\r\n  *\r\n  * Note that converters don't currently support tokens with transfer fees.\r\n*/\r\nabstract contract ConverterBase is IConverter, TokenHandler, TokenHolder, ContractRegistryClient, ReentrancyGuard {\r\n    using SafeMath for uint256;\r\n\r\n    uint32 internal constant PPM_RESOLUTION = 1000000;\r\n    IERC20Token internal constant ETH_RESERVE_ADDRESS = IERC20Token(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);\r\n\r\n    struct Reserve {\r\n        uint256 balance;    // reserve balance\r\n        uint32 weight;      // reserve weight, represented in ppm, 1-1000000\r\n        bool deprecated1;   // deprecated\r\n        bool deprecated2;   // deprecated\r\n        bool isSet;         // true if the reserve is valid, false otherwise\r\n    }\r\n\r\n    /**\r\n      * @dev version number\r\n    */\r\n    uint16 public constant version = 39;\r\n\r\n    IConverterAnchor public override anchor;            // converter anchor contract\r\n    IWhitelist public override conversionWhitelist;     // whitelist contract with list of addresses that are allowed to use the converter\r\n    IERC20Token[] public reserveTokens;                 // ERC20 standard token addresses (prior version 17, use 'connectorTokens' instead)\r\n    mapping (IERC20Token => Reserve) public reserves;   // reserve token addresses -> reserve data (prior version 17, use 'connectors' instead)\r\n    uint32 public reserveRatio = 0;                     // ratio between the reserves and the market cap, equal to the total reserve weights\r\n    uint32 public override maxConversionFee = 0;        // maximum conversion fee for the lifetime of the contract,\r\n                                                        // represented in ppm, 0...1000000 (0 = no fee, 100 = 0.01%, 1000000 = 100%)\r\n    uint32 public override conversionFee = 0;           // current conversion fee, represented in ppm, 0...maxConversionFee\r\n    bool public constant conversionsEnabled = true;     // deprecated, backward compatibility\r\n\r\n    /**\r\n      * @dev triggered when the converter is activated\r\n      *\r\n      * @param _type        converter type\r\n      * @param _anchor      converter anchor\r\n      * @param _activated   true if the converter was activated, false if it was deactivated\r\n    */\r\n    event Activation(uint16 indexed _type, IConverterAnchor indexed _anchor, bool indexed _activated);\r\n\r\n    /**\r\n      * @dev triggered when a conversion between two tokens occurs\r\n      *\r\n      * @param _fromToken       source ERC20 token\r\n      * @param _toToken         target ERC20 token\r\n      * @param _trader          wallet that initiated the trade\r\n      * @param _amount          amount converted, in the source token\r\n      * @param _return          amount returned, minus conversion fee\r\n      * @param _conversionFee   conversion fee\r\n    */\r\n    event Conversion(\r\n        IERC20Token indexed _fromToken,\r\n        IERC20Token indexed _toToken,\r\n        address indexed _trader,\r\n        uint256 _amount,\r\n        uint256 _return,\r\n        int256 _conversionFee\r\n    );\r\n\r\n    /**\r\n      * @dev triggered when the rate between two tokens in the converter changes\r\n      * note that the event might be dispatched for rate updates between any two tokens in the converter\r\n      * note that prior to version 28, you should use the 'PriceDataUpdate' event instead\r\n      *\r\n      * @param  _token1 address of the first token\r\n      * @param  _token2 address of the second token\r\n      * @param  _rateN  rate of 1 unit of `_token1` in `_token2` (numerator)\r\n      * @param  _rateD  rate of 1 unit of `_token1` in `_token2` (denominator)\r\n    */\r\n    event TokenRateUpdate(\r\n        IERC20Token indexed _token1,\r\n        IERC20Token indexed _token2,\r\n        uint256 _rateN,\r\n        uint256 _rateD\r\n    );\r\n\r\n    /**\r\n      * @dev triggered when the conversion fee is updated\r\n      *\r\n      * @param  _prevFee    previous fee percentage, represented in ppm\r\n      * @param  _newFee     new fee percentage, represented in ppm\r\n    */\r\n    event ConversionFeeUpdate(uint32 _prevFee, uint32 _newFee);\r\n\r\n    /**\r\n      * @dev used by sub-contracts to initialize a new converter\r\n      *\r\n      * @param  _anchor             anchor governed by the converter\r\n      * @param  _registry           address of a contract registry contract\r\n      * @param  _maxConversionFee   maximum conversion fee, represented in ppm\r\n    */\r\n    constructor(\r\n        IConverterAnchor _anchor,\r\n        IContractRegistry _registry,\r\n        uint32 _maxConversionFee\r\n    )\r\n        validAddress(address(_anchor))\r\n        ContractRegistryClient(_registry)\r\n        internal\r\n        validConversionFee(_maxConversionFee)\r\n    {\r\n        anchor = _anchor;\r\n        maxConversionFee = _maxConversionFee;\r\n    }\r\n\r\n    // ensures that the converter is active\r\n    modifier active() {\r\n        _active();\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _active() internal view {\r\n        require(isActive(), \"ERR_INACTIVE\");\r\n    }\r\n\r\n    // ensures that the converter is not active\r\n    modifier inactive() {\r\n        _inactive();\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _inactive() internal view {\r\n        require(!isActive(), \"ERR_ACTIVE\");\r\n    }\r\n\r\n    // validates a reserve token address - verifies that the address belongs to one of the reserve tokens\r\n    modifier validReserve(IERC20Token _address) {\r\n        _validReserve(_address);\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _validReserve(IERC20Token _address) internal view {\r\n        require(reserves[_address].isSet, \"ERR_INVALID_RESERVE\");\r\n    }\r\n\r\n    // validates conversion fee\r\n    modifier validConversionFee(uint32 _conversionFee) {\r\n        _validConversionFee(_conversionFee);\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _validConversionFee(uint32 _conversionFee) internal pure {\r\n        require(_conversionFee <= PPM_RESOLUTION, \"ERR_INVALID_CONVERSION_FEE\");\r\n    }\r\n\r\n    // validates reserve weight\r\n    modifier validReserveWeight(uint32 _weight) {\r\n        _validReserveWeight(_weight);\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _validReserveWeight(uint32 _weight) internal pure {\r\n        require(_weight > 0 && _weight <= PPM_RESOLUTION, \"ERR_INVALID_RESERVE_WEIGHT\");\r\n    }\r\n\r\n    // overrides interface declaration\r\n    function converterType() public pure virtual override returns (uint16);\r\n\r\n    // overrides interface declaration\r\n    function targetAmountAndFee(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount)\r\n        public\r\n        view\r\n        virtual\r\n        override\r\n        returns (uint256, uint256);\r\n\r\n    /**\r\n      * @dev deposits ether\r\n      * can only be called if the converter has an ETH reserve\r\n    */\r\n    receive() external override payable {\r\n        require(reserves[ETH_RESERVE_ADDRESS].isSet, \"ERR_INVALID_RESERVE\"); // require(hasETHReserve(), \"ERR_INVALID_RESERVE\");\r\n        // a workaround for a problem when running solidity-coverage\r\n        // see https://github.com/sc-forks/solidity-coverage/issues/487\r\n    }\r\n\r\n    /**\r\n      * @dev withdraws ether\r\n      * can only be called by the owner if the converter is inactive or by upgrader contract\r\n      * can only be called after the upgrader contract has accepted the ownership of this contract\r\n      * can only be called if the converter has an ETH reserve\r\n      *\r\n      * @param _to  address to send the ETH to\r\n    */\r\n    function withdrawETH(address payable _to)\r\n        public\r\n        override\r\n        protected\r\n        ownerOnly\r\n        validReserve(ETH_RESERVE_ADDRESS)\r\n    {\r\n        address converterUpgrader = addressOf(CONVERTER_UPGRADER);\r\n\r\n        // verify that the converter is inactive or that the owner is the upgrader contract\r\n        require(!isActive() || owner == converterUpgrader, \"ERR_ACCESS_DENIED\");\r\n        _to.transfer(address(this).balance);\r\n\r\n        // sync the ETH reserve balance\r\n        syncReserveBalance(ETH_RESERVE_ADDRESS);\r\n    }\r\n\r\n    /**\r\n      * @dev checks whether or not the converter version is 28 or higher\r\n      *\r\n      * @return true, since the converter version is 28 or higher\r\n    */\r\n    function isV28OrHigher() public pure returns (bool) {\r\n        return true;\r\n    }\r\n\r\n    /**\r\n      * @dev allows the owner to update & enable the conversion whitelist contract address\r\n      * when set, only addresses that are whitelisted are actually allowed to use the converter\r\n      * note that the whitelist check is actually done by the BancorNetwork contract\r\n      *\r\n      * @param _whitelist    address of a whitelist contract\r\n    */\r\n    function setConversionWhitelist(IWhitelist _whitelist)\r\n        public\r\n        override\r\n        ownerOnly\r\n        notThis(address(_whitelist))\r\n    {\r\n        conversionWhitelist = _whitelist;\r\n    }\r\n\r\n    /**\r\n      * @dev returns true if the converter is active, false otherwise\r\n      *\r\n      * @return true if the converter is active, false otherwise\r\n    */\r\n    function isActive() public view virtual override returns (bool) {\r\n        return anchor.owner() == address(this);\r\n    }\r\n\r\n    /**\r\n      * @dev transfers the anchor ownership\r\n      * the new owner needs to accept the transfer\r\n      * can only be called by the converter upgrder while the upgrader is the owner\r\n      * note that prior to version 28, you should use 'transferAnchorOwnership' instead\r\n      *\r\n      * @param _newOwner    new token owner\r\n    */\r\n    function transferAnchorOwnership(address _newOwner)\r\n        public\r\n        override\r\n        ownerOnly\r\n        only(CONVERTER_UPGRADER)\r\n    {\r\n        anchor.transferOwnership(_newOwner);\r\n    }\r\n\r\n    /**\r\n      * @dev accepts ownership of the anchor after an ownership transfer\r\n      * most converters are also activated as soon as they accept the anchor ownership\r\n      * can only be called by the contract owner\r\n      * note that prior to version 28, you should use 'acceptTokenOwnership' instead\r\n    */\r\n    function acceptAnchorOwnership() public virtual override ownerOnly {\r\n        // verify the the converter has at least one reserve\r\n        require(reserveTokenCount() > 0, \"ERR_INVALID_RESERVE_COUNT\");\r\n        anchor.acceptOwnership();\r\n        syncReserveBalances();\r\n    }\r\n\r\n    /**\r\n      * @dev withdraws tokens held by the anchor and sends them to an account\r\n      * can only be called by the owner\r\n      *\r\n      * @param _token   ERC20 token contract address\r\n      * @param _to      account to receive the new amount\r\n      * @param _amount  amount to withdraw\r\n    */\r\n    function withdrawFromAnchor(IERC20Token _token, address _to, uint256 _amount) public ownerOnly {\r\n        anchor.withdrawTokens(_token, _to, _amount);\r\n    }\r\n\r\n    /**\r\n      * @dev updates the current conversion fee\r\n      * can only be called by the contract owner\r\n      *\r\n      * @param _conversionFee new conversion fee, represented in ppm\r\n    */\r\n    function setConversionFee(uint32 _conversionFee) public override ownerOnly {\r\n        require(_conversionFee <= maxConversionFee, \"ERR_INVALID_CONVERSION_FEE\");\r\n        emit ConversionFeeUpdate(conversionFee, _conversionFee);\r\n        conversionFee = _conversionFee;\r\n    }\r\n\r\n    /**\r\n      * @dev withdraws tokens held by the converter and sends them to an account\r\n      * can only be called by the owner\r\n      * note that reserve tokens can only be withdrawn by the owner while the converter is inactive\r\n      * unless the owner is the converter upgrader contract\r\n      *\r\n      * @param _token   ERC20 token contract address\r\n      * @param _to      account to receive the new amount\r\n      * @param _amount  amount to withdraw\r\n    */\r\n    function withdrawTokens(IERC20Token _token, address _to, uint256 _amount)\r\n        public\r\n        override(IConverter, TokenHolder)\r\n        protected\r\n        ownerOnly\r\n    {\r\n        address converterUpgrader = addressOf(CONVERTER_UPGRADER);\r\n\r\n        // if the token is not a reserve token, allow withdrawal\r\n        // otherwise verify that the converter is inactive or that the owner is the upgrader contract\r\n        require(!reserves[_token].isSet || !isActive() || owner == converterUpgrader, \"ERR_ACCESS_DENIED\");\r\n        super.withdrawTokens(_token, _to, _amount);\r\n\r\n        // if the token is a reserve token, sync the reserve balance\r\n        if (reserves[_token].isSet)\r\n            syncReserveBalance(_token);\r\n    }\r\n\r\n    /**\r\n      * @dev upgrades the converter to the latest version\r\n      * can only be called by the owner\r\n      * note that the owner needs to call acceptOwnership on the new converter after the upgrade\r\n    */\r\n    function upgrade() public ownerOnly {\r\n        IConverterUpgrader converterUpgrader = IConverterUpgrader(addressOf(CONVERTER_UPGRADER));\r\n\r\n        // trigger de-activation event\r\n        emit Activation(converterType(), anchor, false);\r\n\r\n        transferOwnership(address(converterUpgrader));\r\n        converterUpgrader.upgrade(version);\r\n        acceptOwnership();\r\n    }\r\n\r\n    /**\r\n      * @dev returns the number of reserve tokens defined\r\n      * note that prior to version 17, you should use 'connectorTokenCount' instead\r\n      *\r\n      * @return number of reserve tokens\r\n    */\r\n    function reserveTokenCount() public view returns (uint16) {\r\n        return uint16(reserveTokens.length);\r\n    }\r\n\r\n    /**\r\n      * @dev defines a new reserve token for the converter\r\n      * can only be called by the owner while the converter is inactive\r\n      *\r\n      * @param _token   address of the reserve token\r\n      * @param _weight  reserve weight, represented in ppm, 1-1000000\r\n    */\r\n    function addReserve(IERC20Token _token, uint32 _weight)\r\n        public\r\n        virtual\r\n        override\r\n        ownerOnly\r\n        inactive\r\n        validAddress(address(_token))\r\n        notThis(address(_token))\r\n        validReserveWeight(_weight)\r\n    {\r\n        // validate input\r\n        require(address(_token) != address(anchor) && !reserves[_token].isSet, \"ERR_INVALID_RESERVE\");\r\n        require(_weight <= PPM_RESOLUTION - reserveRatio, \"ERR_INVALID_RESERVE_WEIGHT\");\r\n        require(reserveTokenCount() < uint16(-1), \"ERR_INVALID_RESERVE_COUNT\");\r\n\r\n        Reserve storage newReserve = reserves[_token];\r\n        newReserve.balance = 0;\r\n        newReserve.weight = _weight;\r\n        newReserve.isSet = true;\r\n        reserveTokens.push(_token);\r\n        reserveRatio += _weight;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the reserve's weight\r\n      * added in version 28\r\n      *\r\n      * @param _reserveToken    reserve token contract address\r\n      *\r\n      * @return reserve weight\r\n    */\r\n    function reserveWeight(IERC20Token _reserveToken)\r\n        public\r\n        view\r\n        validReserve(_reserveToken)\r\n        returns (uint32)\r\n    {\r\n        return reserves[_reserveToken].weight;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the reserve's balance\r\n      * note that prior to version 17, you should use 'getConnectorBalance' instead\r\n      *\r\n      * @param _reserveToken    reserve token contract address\r\n      *\r\n      * @return reserve balance\r\n    */\r\n    function reserveBalance(IERC20Token _reserveToken)\r\n        public\r\n        override\r\n        view\r\n        validReserve(_reserveToken)\r\n        returns (uint256)\r\n    {\r\n        return reserves[_reserveToken].balance;\r\n    }\r\n\r\n    /**\r\n      * @dev checks whether or not the converter has an ETH reserve\r\n      *\r\n      * @return true if the converter has an ETH reserve, false otherwise\r\n    */\r\n    function hasETHReserve() public view returns (bool) {\r\n        return reserves[ETH_RESERVE_ADDRESS].isSet;\r\n    }\r\n\r\n    /**\r\n      * @dev converts a specific amount of source tokens to target tokens\r\n      * can only be called by the bancor network contract\r\n      *\r\n      * @param _sourceToken source ERC20 token\r\n      * @param _targetToken target ERC20 token\r\n      * @param _amount      amount of tokens to convert (in units of the source token)\r\n      * @param _trader      address of the caller who executed the conversion\r\n      * @param _beneficiary wallet to receive the conversion result\r\n      *\r\n      * @return amount of tokens received (in units of the target token)\r\n    */\r\n    function convert(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount, address _trader, address payable _beneficiary)\r\n        public\r\n        override\r\n        payable\r\n        protected\r\n        only(BANCOR_NETWORK)\r\n        returns (uint256)\r\n    {\r\n        // validate input\r\n        require(_sourceToken != _targetToken, \"ERR_SAME_SOURCE_TARGET\");\r\n\r\n        // if a whitelist is set, verify that both and trader and the beneficiary are whitelisted\r\n        require(address(conversionWhitelist) == address(0) ||\r\n                (conversionWhitelist.isWhitelisted(_trader) && conversionWhitelist.isWhitelisted(_beneficiary)),\r\n                \"ERR_NOT_WHITELISTED\");\r\n\r\n        return doConvert(_sourceToken, _targetToken, _amount, _trader, _beneficiary);\r\n    }\r\n\r\n    /**\r\n      * @dev converts a specific amount of source tokens to target tokens\r\n      * called by ConverterBase and allows the inherited contracts to implement custom conversion logic\r\n      *\r\n      * @param _sourceToken source ERC20 token\r\n      * @param _targetToken target ERC20 token\r\n      * @param _amount      amount of tokens to convert (in units of the source token)\r\n      * @param _trader      address of the caller who executed the conversion\r\n      * @param _beneficiary wallet to receive the conversion result\r\n      *\r\n      * @return amount of tokens received (in units of the target token)\r\n    */\r\n    function doConvert(\r\n        IERC20Token _sourceToken,\r\n        IERC20Token _targetToken,\r\n        uint256 _amount,\r\n        address _trader,\r\n        address payable _beneficiary)\r\n        internal\r\n        virtual\r\n        returns (uint256);\r\n\r\n    /**\r\n      * @dev returns the conversion fee for a given target amount\r\n      *\r\n      * @param _targetAmount  target amount\r\n      *\r\n      * @return conversion fee\r\n    */\r\n    function calculateFee(uint256 _targetAmount) internal view returns (uint256) {\r\n        return _targetAmount.mul(conversionFee).div(PPM_RESOLUTION);\r\n    }\r\n\r\n    /**\r\n      * @dev syncs the stored reserve balance for a given reserve with the real reserve balance\r\n      *\r\n      * @param _reserveToken    address of the reserve token\r\n    */\r\n    function syncReserveBalance(IERC20Token _reserveToken) internal validReserve(_reserveToken) {\r\n        if (_reserveToken == ETH_RESERVE_ADDRESS)\r\n            reserves[_reserveToken].balance = address(this).balance;\r\n        else\r\n            reserves[_reserveToken].balance = _reserveToken.balanceOf(address(this));\r\n    }\r\n\r\n    /**\r\n      * @dev syncs all stored reserve balances\r\n    */\r\n    function syncReserveBalances() internal {\r\n        uint256 reserveCount = reserveTokens.length;\r\n        for (uint256 i = 0; i < reserveCount; i++)\r\n            syncReserveBalance(reserveTokens[i]);\r\n    }\r\n\r\n    /**\r\n      * @dev helper, dispatches the Conversion event\r\n      *\r\n      * @param _sourceToken     source ERC20 token\r\n      * @param _targetToken     target ERC20 token\r\n      * @param _trader          address of the caller who executed the conversion\r\n      * @param _amount          amount purchased/sold (in the source token)\r\n      * @param _returnAmount    amount returned (in the target token)\r\n    */\r\n    function dispatchConversionEvent(\r\n        IERC20Token _sourceToken,\r\n        IERC20Token _targetToken,\r\n        address _trader,\r\n        uint256 _amount,\r\n        uint256 _returnAmount,\r\n        uint256 _feeAmount)\r\n        internal\r\n    {\r\n        // fee amount is converted to 255 bits -\r\n        // negative amount means the fee is taken from the source token, positive amount means its taken from the target token\r\n        // currently the fee is always taken from the target token\r\n        // since we convert it to a signed number, we first ensure that it's capped at 255 bits to prevent overflow\r\n        assert(_feeAmount < 2 ** 255);\r\n        emit Conversion(_sourceToken, _targetToken, _trader, _amount, _returnAmount, int256(_feeAmount));\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated since version 28, backward compatibility - use only for earlier versions\r\n    */\r\n    function token() public view override returns (IConverterAnchor) {\r\n        return anchor;\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function transferTokenOwnership(address _newOwner) public override ownerOnly {\r\n        transferAnchorOwnership(_newOwner);\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function acceptTokenOwnership() public override ownerOnly {\r\n        acceptAnchorOwnership();\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function connectors(IERC20Token _address) public view override returns (uint256, uint32, bool, bool, bool) {\r\n        Reserve memory reserve = reserves[_address];\r\n        return(reserve.balance, reserve.weight, false, false, reserve.isSet);\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function connectorTokens(uint256 _index) public view override returns (IERC20Token) {\r\n        return ConverterBase.reserveTokens[_index];\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function connectorTokenCount() public view override returns (uint16) {\r\n        return reserveTokenCount();\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function getConnectorBalance(IERC20Token _connectorToken) public view override returns (uint256) {\r\n        return reserveBalance(_connectorToken);\r\n    }\r\n\r\n    /**\r\n      * @dev deprecated, backward compatibility\r\n    */\r\n    function getReturn(IERC20Token _sourceToken, IERC20Token _targetToken, uint256 _amount) public view returns (uint256, uint256) {\r\n        return targetAmountAndFee(_sourceToken, _targetToken, _amount);\r\n    }\r\n}\r\n",
  "sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
  "ast": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
    "exportedSymbols": {
      "ConverterBase": [
        10039
      ]
    },
    "id": 10040,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8979,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:8"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol",
        "file": "./interfaces/IConverter.sol",
        "id": 8980,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13341,
        "src": "77:37:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol",
        "file": "./interfaces/IConverterAnchor.sol",
        "id": 8981,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13350,
        "src": "116:43:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol",
        "file": "./interfaces/IConverterUpgrader.sol",
        "id": 8982,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13661,
        "src": "161:45:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol",
        "file": "./interfaces/IBancorFormula.sol",
        "id": 8983,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13178,
        "src": "208:41:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
        "file": "../utility/ContractRegistryClient.sol",
        "id": 8984,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 21720,
        "src": "251:47:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol",
        "file": "../utility/ReentrancyGuard.sol",
        "id": 8985,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22243,
        "src": "300:40:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
        "file": "../utility/SafeMath.sol",
        "id": 8986,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22355,
        "src": "342:33:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol",
        "file": "../utility/TokenHandler.sol",
        "id": 8987,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22527,
        "src": "377:37:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol",
        "file": "../utility/TokenHolder.sol",
        "id": 8988,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22576,
        "src": "416:36:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol",
        "file": "../token/interfaces/IEtherToken.sol",
        "id": 8989,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 21154,
        "src": "454:45:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol",
        "file": "../bancorx/interfaces/IBancorX.sol",
        "id": 8990,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 3552,
        "src": "501:44:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8992,
              "name": "IConverter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13340,
              "src": "1683:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConverter_$13340",
                "typeString": "contract IConverter"
              }
            },
            "id": 8993,
            "nodeType": "InheritanceSpecifier",
            "src": "1683:10:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8994,
              "name": "TokenHandler",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22526,
              "src": "1695:12:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenHandler_$22526",
                "typeString": "contract TokenHandler"
              }
            },
            "id": 8995,
            "nodeType": "InheritanceSpecifier",
            "src": "1695:12:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8996,
              "name": "TokenHolder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22575,
              "src": "1709:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenHolder_$22575",
                "typeString": "contract TokenHolder"
              }
            },
            "id": 8997,
            "nodeType": "InheritanceSpecifier",
            "src": "1709:11:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8998,
              "name": "ContractRegistryClient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21719,
              "src": "1722:22:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContractRegistryClient_$21719",
                "typeString": "contract ContractRegistryClient"
              }
            },
            "id": 8999,
            "nodeType": "InheritanceSpecifier",
            "src": "1722:22:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9000,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22242,
              "src": "1746:15:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22242",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 9001,
            "nodeType": "InheritanceSpecifier",
            "src": "1746:15:8"
          }
        ],
        "contractDependencies": [
          13340,
          21719,
          21818,
          22242,
          22526,
          22575,
          22661,
          22847,
          22907
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 8991,
          "nodeType": "StructuredDocumentation",
          "src": "549:1097:8",
          "text": " @dev ConverterBase\n The converter contains the main logic for conversions between different ERC20 tokens.\n It is also the upgradable part of the mechanism (note that upgrades are opt-in).\n The anchor must be set on construction and cannot be changed afterwards.\n Wrappers are provided for some of the anchor's functions, for easier access.\n Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\n and can execute any of its functions.\n To upgrade the converter, anchor ownership must be transferred to a new converter, along with\n any relevant data.\n Note that the converter can transfer anchor ownership to a new converter that\n doesn't allow upgrades anymore, for finalizing the relationship between the converter\n and the anchor.\n Converter types (defined as uint16 type) -\n 0 = liquid token converter\n 1 = liquidity pool v1 converter\n 2 = liquidity pool v2 converter\n Note that converters don't currently support tokens with transfer fees."
        },
        "fullyImplemented": false,
        "id": 10039,
        "linearizedBaseContracts": [
          10039,
          22242,
          21719,
          22575,
          22661,
          21818,
          22526,
          22907,
          13340,
          22847
        ],
        "name": "ConverterBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9004,
            "libraryName": {
              "contractScope": null,
              "id": 9002,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22354,
              "src": "1775:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22354",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1769:27:8",
            "typeName": {
              "id": 9003,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1788:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 9007,
            "mutability": "constant",
            "name": "PPM_RESOLUTION",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "1804:49:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9005,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1804:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030303030",
              "id": 9006,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1846:7:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000_by_1",
                "typeString": "int_const 1000000"
              },
              "value": "1000000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 9012,
            "mutability": "constant",
            "name": "ETH_RESERVE_ADDRESS",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "1860:107:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21127",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 9008,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21127,
              "src": "1860:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21127",
                "typeString": "contract IERC20Token"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
                  "id": 9010,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1924:42:8",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                ],
                "id": 9009,
                "name": "IERC20Token",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 21127,
                "src": "1912:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
                  "typeString": "type(contract IERC20Token)"
                }
              },
              "id": 9011,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1912:55:8",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21127",
                "typeString": "contract IERC20Token"
              }
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "ConverterBase.Reserve",
            "id": 9023,
            "members": [
              {
                "constant": false,
                "id": 9014,
                "mutability": "mutable",
                "name": "balance",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2002:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 9013,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2002:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9016,
                "mutability": "mutable",
                "name": "weight",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2050:13:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 9015,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2050:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9018,
                "mutability": "mutable",
                "name": "deprecated1",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2128:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9017,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2128:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9020,
                "mutability": "mutable",
                "name": "deprecated2",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2171:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9019,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2171:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9022,
                "mutability": "mutable",
                "name": "isSet",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2214:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9021,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2214:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Reserve",
            "nodeType": "StructDefinition",
            "scope": 10039,
            "src": "1976:313:8",
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 9024,
              "nodeType": "StructuredDocumentation",
              "src": "2297:40:8",
              "text": " @dev version number"
            },
            "functionSelector": "54fd4d50",
            "id": 9027,
            "mutability": "constant",
            "name": "version",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2343:35:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 9025,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "2343:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3339",
              "id": 9026,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2376:2:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_39_by_1",
                "typeString": "int_const 39"
              },
              "value": "39"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13195
            ],
            "constant": false,
            "functionSelector": "d3fb73b4",
            "id": 9030,
            "mutability": "mutable",
            "name": "anchor",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9029,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2411:8:8"
            },
            "scope": 10039,
            "src": "2387:39:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
              "typeString": "contract IConverterAnchor"
            },
            "typeName": {
              "contractScope": null,
              "id": 9028,
              "name": "IConverterAnchor",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13349,
              "src": "2387:16:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                "typeString": "contract IConverterAnchor"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13233
            ],
            "constant": false,
            "functionSelector": "c45d3d92",
            "id": 9033,
            "mutability": "mutable",
            "name": "conversionWhitelist",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9032,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2491:8:8"
            },
            "scope": 10039,
            "src": "2473:46:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IWhitelist_$22917",
              "typeString": "contract IWhitelist"
            },
            "typeName": {
              "contractScope": null,
              "id": 9031,
              "name": "IWhitelist",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22917,
              "src": "2473:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IWhitelist_$22917",
                "typeString": "contract IWhitelist"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d031370b",
            "id": 9036,
            "mutability": "mutable",
            "name": "reserveTokens",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2613:34:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
              "typeString": "contract IERC20Token[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 9034,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21127,
                "src": "2613:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                  "typeString": "contract IERC20Token"
                }
              },
              "id": 9035,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "2613:13:8",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage_ptr",
                "typeString": "contract IERC20Token[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d66bd524",
            "id": 9040,
            "mutability": "mutable",
            "name": "reserves",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2754:48:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
            },
            "typeName": {
              "id": 9039,
              "keyType": {
                "contractScope": null,
                "id": 9037,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21127,
                "src": "2763:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "2754:32:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
              },
              "valueType": {
                "contractScope": null,
                "id": 9038,
                "name": "Reserve",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 9023,
                "src": "2778:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                  "typeString": "struct ConverterBase.Reserve"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0c7d5cd8",
            "id": 9043,
            "mutability": "mutable",
            "name": "reserveRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2899:30:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9041,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "2899:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9042,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2928:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13243
            ],
            "constant": false,
            "functionSelector": "94c275ad",
            "id": 9047,
            "mutability": "mutable",
            "name": "maxConversionFee",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9045,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3055:8:8"
            },
            "scope": 10039,
            "src": "3041:43:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9044,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "3041:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9046,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3083:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13238
            ],
            "constant": false,
            "functionSelector": "579cd3ca",
            "id": 9051,
            "mutability": "mutable",
            "name": "conversionFee",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9049,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3306:8:8"
            },
            "scope": 10039,
            "src": "3292:40:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9048,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "3292:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9050,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3331:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "bf754558",
            "id": 9054,
            "mutability": "constant",
            "name": "conversionsEnabled",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "3417:46:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 9052,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "3417:4:8",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 9053,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3459:4:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9055,
              "nodeType": "StructuredDocumentation",
              "src": "3514:260:8",
              "text": " @dev triggered when the converter is activated\n @param _type        converter type\n @param _anchor      converter anchor\n @param _activated   true if the converter was activated, false if it was deactivated"
            },
            "id": 9063,
            "name": "Activation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9057,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3797:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9056,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9059,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3819:32:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9058,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "3819:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9061,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_activated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3853:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9060,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3853:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3796:81:8"
            },
            "src": "3780:98:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9064,
              "nodeType": "StructuredDocumentation",
              "src": "3886:447:8",
              "text": " @dev triggered when a conversion between two tokens occurs\n @param _fromToken       source ERC20 token\n @param _toToken         target ERC20 token\n @param _trader          wallet that initiated the trade\n @param _amount          amount converted, in the source token\n @param _return          amount returned, minus conversion fee\n @param _conversionFee   conversion fee"
            },
            "id": 9078,
            "name": "Conversion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9066,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_fromToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4366:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9065,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "4366:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9068,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_toToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4407:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9067,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "4407:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9070,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4446:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4446:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9072,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4480:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9071,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9074,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_return",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4506:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4506:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9076,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4532:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 9075,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4532:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4355:205:8"
            },
            "src": "4339:222:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9079,
              "nodeType": "StructuredDocumentation",
              "src": "4569:562:8",
              "text": " @dev triggered when the rate between two tokens in the converter changes\n note that the event might be dispatched for rate updates between any two tokens in the converter\n note that prior to version 28, you should use the 'PriceDataUpdate' event instead\n @param  _token1 address of the first token\n @param  _token2 address of the second token\n @param  _rateN  rate of 1 unit of `_token1` in `_token2` (numerator)\n @param  _rateD  rate of 1 unit of `_token1` in `_token2` (denominator)"
            },
            "id": 9089,
            "name": "TokenRateUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9081,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5169:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9080,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "5169:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9083,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5207:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9082,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "5207:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9085,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_rateN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5245:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9084,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5245:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9087,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_rateD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5270:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5270:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5158:133:8"
            },
            "src": "5137:155:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9090,
              "nodeType": "StructuredDocumentation",
              "src": "5300:220:8",
              "text": " @dev triggered when the conversion fee is updated\n @param  _prevFee    previous fee percentage, represented in ppm\n @param  _newFee     new fee percentage, represented in ppm"
            },
            "id": 9096,
            "name": "ConversionFeeUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9092,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_prevFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9096,
                  "src": "5552:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9091,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5552:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9094,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9096,
                  "src": "5569:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9093,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5569:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5551:33:8"
            },
            "src": "5526:59:8"
          },
          {
            "body": {
              "id": 9126,
              "nodeType": "Block",
              "src": "6192:82:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9118,
                      "name": "anchor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9030,
                      "src": "6203:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                        "typeString": "contract IConverterAnchor"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9119,
                      "name": "_anchor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9099,
                      "src": "6212:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                        "typeString": "contract IConverterAnchor"
                      }
                    },
                    "src": "6203:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "id": 9121,
                  "nodeType": "ExpressionStatement",
                  "src": "6203:16:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9122,
                      "name": "maxConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9047,
                      "src": "6230:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9123,
                      "name": "_maxConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9103,
                      "src": "6249:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "6230:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9125,
                  "nodeType": "ExpressionStatement",
                  "src": "6230:36:8"
                }
              ]
            },
            "documentation": {
              "id": 9097,
              "nodeType": "StructuredDocumentation",
              "src": "5593:313:8",
              "text": " @dev used by sub-contracts to initialize a new converter\n @param  _anchor             anchor governed by the converter\n @param  _registry           address of a contract registry contract\n @param  _maxConversionFee   maximum conversion fee, represented in ppm"
            },
            "id": 9127,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9108,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9099,
                        "src": "6069:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      ],
                      "id": 9107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6061:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6061:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6061:16:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9110,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9105,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "6048:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6048:30:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9112,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9101,
                    "src": "6111:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  }
                ],
                "id": 9113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9111,
                  "name": "ContractRegistryClient",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21719,
                  "src": "6088:22:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ContractRegistryClient_$21719_$",
                    "typeString": "type(contract ContractRegistryClient)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6088:33:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9115,
                    "name": "_maxConversionFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9103,
                    "src": "6168:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 9116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9114,
                  "name": "validConversionFee",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9196,
                  "src": "6149:18:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint32_$",
                    "typeString": "modifier (uint32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6149:37:8"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9099,
                  "mutability": "mutable",
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "5934:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9098,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "5934:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9101,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "5969:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9100,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22831,
                    "src": "5969:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9103,
                  "mutability": "mutable",
                  "name": "_maxConversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "6007:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9102,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6007:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5923:115:8"
            },
            "returnParameters": {
              "id": 9117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6192:0:8"
            },
            "scope": 10039,
            "src": "5912:362:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9133,
              "nodeType": "Block",
              "src": "6345:40:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9129,
                      "name": "_active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9144,
                      "src": "6356:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6356:9:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9131,
                  "nodeType": "ExpressionStatement",
                  "src": "6356:9:8"
                },
                {
                  "id": 9132,
                  "nodeType": "PlaceholderStatement",
                  "src": "6376:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9134,
            "name": "active",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6342:2:8"
            },
            "src": "6327:58:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9143,
              "nodeType": "Block",
              "src": "6473:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9138,
                          "name": "isActive",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9362,
                          "src": "6492:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 9139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6492:10:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e414354495645",
                        "id": 9140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6504:14:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
                          "typeString": "literal_string \"ERR_INACTIVE\""
                        },
                        "value": "ERR_INACTIVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
                          "typeString": "literal_string \"ERR_INACTIVE\""
                        }
                      ],
                      "id": 9137,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6484:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6484:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9142,
                  "nodeType": "ExpressionStatement",
                  "src": "6484:35:8"
                }
              ]
            },
            "documentation": null,
            "id": 9144,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_active",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6456:2:8"
            },
            "returnParameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6473:0:8"
            },
            "scope": 10039,
            "src": "6440:87:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9150,
              "nodeType": "Block",
              "src": "6604:42:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9146,
                      "name": "_inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9162,
                      "src": "6615:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6615:11:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9148,
                  "nodeType": "ExpressionStatement",
                  "src": "6615:11:8"
                },
                {
                  "id": 9149,
                  "nodeType": "PlaceholderStatement",
                  "src": "6637:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9151,
            "name": "inactive",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6601:2:8"
            },
            "src": "6584:62:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9161,
              "nodeType": "Block",
              "src": "6736:53:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "6755:11:8",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9155,
                            "name": "isActive",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9362,
                            "src": "6756:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 9156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6756:10:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f414354495645",
                        "id": 9158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6768:12:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
                          "typeString": "literal_string \"ERR_ACTIVE\""
                        },
                        "value": "ERR_ACTIVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
                          "typeString": "literal_string \"ERR_ACTIVE\""
                        }
                      ],
                      "id": 9154,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6747:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6747:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9160,
                  "nodeType": "ExpressionStatement",
                  "src": "6747:34:8"
                }
              ]
            },
            "documentation": null,
            "id": 9162,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_inactive",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6719:2:8"
            },
            "returnParameters": {
              "id": 9153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6736:0:8"
            },
            "scope": 10039,
            "src": "6701:88:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9171,
              "nodeType": "Block",
              "src": "6948:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9167,
                        "name": "_address",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9164,
                        "src": "6973:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9166,
                      "name": "_validReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9186,
                      "src": "6959:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token) view"
                      }
                    },
                    "id": 9168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6959:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9169,
                  "nodeType": "ExpressionStatement",
                  "src": "6959:23:8"
                },
                {
                  "id": 9170,
                  "nodeType": "PlaceholderStatement",
                  "src": "6993:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9172,
            "name": "validReserve",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9164,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9172,
                  "src": "6926:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9163,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "6926:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6925:22:8"
            },
            "src": "6904:98:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9185,
              "nodeType": "Block",
              "src": "7116:75:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9178,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "7135:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9180,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9179,
                            "name": "_address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9174,
                            "src": "7144:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7135:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "7135:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7161:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9177,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7127:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7127:56:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9184,
                  "nodeType": "ExpressionStatement",
                  "src": "7127:56:8"
                }
              ]
            },
            "documentation": null,
            "id": 9186,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validReserve",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9174,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9186,
                  "src": "7080:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9173,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "7080:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7079:22:8"
            },
            "returnParameters": {
              "id": 9176,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7116:0:8"
            },
            "scope": 10039,
            "src": "7057:134:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9195,
              "nodeType": "Block",
              "src": "7283:66:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9191,
                        "name": "_conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9188,
                        "src": "7314:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9190,
                      "name": "_validConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9209,
                      "src": "7294:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
                        "typeString": "function (uint32) pure"
                      }
                    },
                    "id": 9192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7294:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9193,
                  "nodeType": "ExpressionStatement",
                  "src": "7294:35:8"
                },
                {
                  "id": 9194,
                  "nodeType": "PlaceholderStatement",
                  "src": "7340:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9196,
            "name": "validConversionFee",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9188,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9196,
                  "src": "7260:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9187,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7260:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7259:23:8"
            },
            "src": "7232:117:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9208,
              "nodeType": "Block",
              "src": "7470:90:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9202,
                          "name": "_conversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9198,
                          "src": "7489:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9203,
                          "name": "PPM_RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9007,
                          "src": "7507:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "7489:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
                        "id": 9205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7523:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        },
                        "value": "ERR_INVALID_CONVERSION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        }
                      ],
                      "id": 9201,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7481:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7481:71:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9207,
                  "nodeType": "ExpressionStatement",
                  "src": "7481:71:8"
                }
              ]
            },
            "documentation": null,
            "id": 9209,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validConversionFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9198,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9209,
                  "src": "7433:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9197,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7433:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7432:23:8"
            },
            "returnParameters": {
              "id": 9200,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7470:0:8"
            },
            "scope": 10039,
            "src": "7404:156:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9218,
              "nodeType": "Block",
              "src": "7645:59:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9214,
                        "name": "_weight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9211,
                        "src": "7676:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9213,
                      "name": "_validReserveWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9236,
                      "src": "7656:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
                        "typeString": "function (uint32) pure"
                      }
                    },
                    "id": 9215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7656:28:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9216,
                  "nodeType": "ExpressionStatement",
                  "src": "7656:28:8"
                },
                {
                  "id": 9217,
                  "nodeType": "PlaceholderStatement",
                  "src": "7695:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9219,
            "name": "validReserveWeight",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9211,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9219,
                  "src": "7629:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9210,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:16:8"
            },
            "src": "7601:103:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9235,
              "nodeType": "Block",
              "src": "7818:98:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9225,
                            "name": "_weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9221,
                            "src": "7837:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 9226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7847:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7837:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9228,
                            "name": "_weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9221,
                            "src": "7852:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9229,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "7863:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "7852:25:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7837:40:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
                        "id": 9232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7879:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        },
                        "value": "ERR_INVALID_RESERVE_WEIGHT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        }
                      ],
                      "id": 9224,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7829:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7829:79:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9234,
                  "nodeType": "ExpressionStatement",
                  "src": "7829:79:8"
                }
              ]
            },
            "documentation": null,
            "id": 9236,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validReserveWeight",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9221,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9236,
                  "src": "7788:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9220,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7788:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7787:16:8"
            },
            "returnParameters": {
              "id": 9223,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7818:0:8"
            },
            "scope": 10039,
            "src": "7759:157:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              13190
            ],
            "body": null,
            "documentation": null,
            "functionSelector": "3e8ff43f",
            "id": 9242,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "converterType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9238,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8009:8:8"
            },
            "parameters": {
              "id": 9237,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7986:2:8"
            },
            "returnParameters": {
              "id": 9241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9240,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9242,
                  "src": "8027:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9239,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8027:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8026:8:8"
            },
            "scope": 10039,
            "src": "7964:71:8",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13213
            ],
            "body": null,
            "documentation": null,
            "functionSelector": "af94b8d8",
            "id": 9256,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "targetAmountAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9250,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8236:8:8"
            },
            "parameters": {
              "id": 9249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9244,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8111:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9243,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "8111:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9246,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8137:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9245,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "8137:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9248,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8163:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9247,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8163:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:69:8"
            },
            "returnParameters": {
              "id": 9255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9252,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8263:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9254,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8272:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8272:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8262:18:8"
            },
            "scope": 10039,
            "src": "8083:198:8",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13253
            ],
            "body": {
              "id": 9269,
              "nodeType": "Block",
              "src": "8435:281:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9262,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "8454:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9264,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9263,
                            "name": "ETH_RESERVE_ADDRESS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9012,
                            "src": "8463:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8454:29:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9265,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "8454:35:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8491:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9261,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8446:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8446:67:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9268,
                  "nodeType": "ExpressionStatement",
                  "src": "8446:67:8"
                }
              ]
            },
            "documentation": {
              "id": 9257,
              "nodeType": "StructuredDocumentation",
              "src": "8289:104:8",
              "text": " @dev deposits ether\n can only be called if the converter has an ETH reserve"
            },
            "id": 9270,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9259,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8418:8:8"
            },
            "parameters": {
              "id": 9258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8406:2:8"
            },
            "returnParameters": {
              "id": 9260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8435:0:8"
            },
            "scope": 10039,
            "src": "8399:317:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              13285
            ],
            "body": {
              "id": 9315,
              "nodeType": "Block",
              "src": "9248:392:8",
              "statements": [
                {
                  "assignments": [
                    9285
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9285,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9315,
                      "src": "9259:25:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9284,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9259:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9289,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9287,
                        "name": "CONVERTER_UPGRADER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21542,
                        "src": "9297:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 9286,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21718,
                      "src": "9287:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 9288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9287:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9259:57:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9430:11:8",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9291,
                              "name": "isActive",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9362,
                              "src": "9431:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 9292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9431:10:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9294,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "9445:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9295,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9285,
                            "src": "9454:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9445:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9430:41:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 9298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9473:19:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 9290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9422:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9422:71:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9300,
                  "nodeType": "ExpressionStatement",
                  "src": "9422:71:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9306,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "9525:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            ],
                            "id": 9305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9517:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 9304,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9517:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9517:13:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 9308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9517:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9301,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9273,
                        "src": "9504:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 9303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9504:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 9309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9504:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9310,
                  "nodeType": "ExpressionStatement",
                  "src": "9504:35:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9312,
                        "name": "ETH_RESERVE_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9012,
                        "src": "9612:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9311,
                      "name": "syncReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9844,
                      "src": "9593:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 9313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9593:39:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9314,
                  "nodeType": "ExpressionStatement",
                  "src": "9593:39:8"
                }
              ]
            },
            "documentation": {
              "id": 9271,
              "nodeType": "StructuredDocumentation",
              "src": "8724:356:8",
              "text": " @dev withdraws ether\n can only be called by the owner if the converter is inactive or by upgrader contract\n can only be called after the upgrader contract has accepted the ownership of this contract\n can only be called if the converter has an ETH reserve\n @param _to  address to send the ETH to"
            },
            "functionSelector": "690d8320",
            "id": 9316,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9276,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "9171:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9171:9:8"
              },
              {
                "arguments": null,
                "id": 9279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9278,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "9190:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9190:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9281,
                    "name": "ETH_RESERVE_ADDRESS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9012,
                    "src": "9222:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9282,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9280,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "9209:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9209:33:8"
              }
            ],
            "name": "withdrawETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9275,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9153:8:8"
            },
            "parameters": {
              "id": 9274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9273,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9316,
                  "src": "9107:19:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9107:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9106:21:8"
            },
            "returnParameters": {
              "id": 9283,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9248:0:8"
            },
            "scope": 10039,
            "src": "9086:554:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9324,
              "nodeType": "Block",
              "src": "9867:30:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 9322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9885:4:8",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 9321,
                  "id": 9323,
                  "nodeType": "Return",
                  "src": "9878:11:8"
                }
              ]
            },
            "documentation": {
              "id": 9317,
              "nodeType": "StructuredDocumentation",
              "src": "9648:161:8",
              "text": " @dev checks whether or not the converter version is 28 or higher\n @return true, since the converter version is 28 or higher"
            },
            "functionSelector": "d260529c",
            "id": 9325,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isV28OrHigher",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9837:2:8"
            },
            "returnParameters": {
              "id": 9321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9320,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9325,
                  "src": "9861:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9319,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9861:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9860:6:8"
            },
            "scope": 10039,
            "src": "9815:82:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13271
            ],
            "body": {
              "id": 9344,
              "nodeType": "Block",
              "src": "10419:51:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9340,
                      "name": "conversionWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9033,
                      "src": "10430:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$22917",
                        "typeString": "contract IWhitelist"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9341,
                      "name": "_whitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9328,
                      "src": "10452:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$22917",
                        "typeString": "contract IWhitelist"
                      }
                    },
                    "src": "10430:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "id": 9343,
                  "nodeType": "ExpressionStatement",
                  "src": "10430:32:8"
                }
              ]
            },
            "documentation": {
              "id": 9326,
              "nodeType": "StructuredDocumentation",
              "src": "9905:357:8",
              "text": " @dev allows the owner to update & enable the conversion whitelist contract address\n when set, only addresses that are whitelisted are actually allowed to use the converter\n note that the whitelist check is actually done by the BancorNetwork contract\n @param _whitelist    address of a whitelist contract"
            },
            "functionSelector": "4af80f0e",
            "id": 9345,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9332,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9331,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "10366:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10366:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9336,
                        "name": "_whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9328,
                        "src": "10401:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWhitelist_$22917",
                          "typeString": "contract IWhitelist"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IWhitelist_$22917",
                          "typeString": "contract IWhitelist"
                        }
                      ],
                      "id": 9335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "10393:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9334,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10393:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10393:19:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9338,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9333,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22644,
                  "src": "10385:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10385:28:8"
              }
            ],
            "name": "setConversionWhitelist",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9330,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10348:8:8"
            },
            "parameters": {
              "id": 9329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9328,
                  "mutability": "mutable",
                  "name": "_whitelist",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9345,
                  "src": "10300:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IWhitelist_$22917",
                    "typeString": "contract IWhitelist"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9327,
                    "name": "IWhitelist",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "10300:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10299:23:8"
            },
            "returnParameters": {
              "id": 9339,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10419:0:8"
            },
            "scope": 10039,
            "src": "10268:202:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13200
            ],
            "body": {
              "id": 9361,
              "nodeType": "Block",
              "src": "10705:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 9359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9352,
                          "name": "anchor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9030,
                          "src": "10723:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                            "typeString": "contract IConverterAnchor"
                          }
                        },
                        "id": 9353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22838,
                        "src": "10723:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 9354,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10723:14:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9357,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "10749:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ConverterBase_$10039",
                            "typeString": "contract ConverterBase"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ConverterBase_$10039",
                            "typeString": "contract ConverterBase"
                          }
                        ],
                        "id": 9356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10741:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 9355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10741:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10741:13:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "10723:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9351,
                  "id": 9360,
                  "nodeType": "Return",
                  "src": "10716:38:8"
                }
              ]
            },
            "documentation": {
              "id": 9346,
              "nodeType": "StructuredDocumentation",
              "src": "10478:157:8",
              "text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
            },
            "functionSelector": "22f3e2d4",
            "id": 9362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isActive",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9348,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10681:8:8"
            },
            "parameters": {
              "id": 9347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10658:2:8"
            },
            "returnParameters": {
              "id": 9351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9350,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9362,
                  "src": "10699:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9349,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10699:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10698:6:8"
            },
            "scope": 10039,
            "src": "10641:121:8",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13258
            ],
            "body": {
              "id": 9380,
              "nodeType": "Block",
              "src": "11256:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9377,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9365,
                        "src": "11292:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9374,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "11267:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22843,
                      "src": "11267:24:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11267:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9379,
                  "nodeType": "ExpressionStatement",
                  "src": "11267:35:8"
                }
              ]
            },
            "documentation": {
              "id": 9363,
              "nodeType": "StructuredDocumentation",
              "src": "10770:336:8",
              "text": " @dev transfers the anchor ownership\n the new owner needs to accept the transfer\n can only be called by the converter upgrder while the upgrader is the owner\n note that prior to version 28, you should use 'transferAnchorOwnership' instead\n @param _newOwner    new token owner"
            },
            "functionSelector": "67b6d57c",
            "id": 9381,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9369,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9368,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "11207:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11207:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9371,
                    "name": "CONVERTER_UPGRADER",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21542,
                    "src": "11231:18:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9370,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21577,
                  "src": "11226:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11226:24:8"
              }
            ],
            "name": "transferAnchorOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9367,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11189:8:8"
            },
            "parameters": {
              "id": 9366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9365,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9381,
                  "src": "11145:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11145:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11144:19:8"
            },
            "returnParameters": {
              "id": 9373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11256:0:8"
            },
            "scope": 10039,
            "src": "11112:198:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13261
            ],
            "body": {
              "id": 9404,
              "nodeType": "Block",
              "src": "11700:209:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 9392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9389,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "11781:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 9390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11781:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 9391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11803:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11781:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 9393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11806:27:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 9388,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11773:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11773:61:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9395,
                  "nodeType": "ExpressionStatement",
                  "src": "11773:61:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9396,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "11845:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "acceptOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22846,
                      "src": "11845:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11845:24:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9400,
                  "nodeType": "ExpressionStatement",
                  "src": "11845:24:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9401,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "11880:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11880:21:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9403,
                  "nodeType": "ExpressionStatement",
                  "src": "11880:21:8"
                }
              ]
            },
            "documentation": {
              "id": 9382,
              "nodeType": "StructuredDocumentation",
              "src": "11318:309:8",
              "text": " @dev accepts ownership of the anchor after an ownership transfer\n most converters are also activated as soon as they accept the anchor ownership\n can only be called by the contract owner\n note that prior to version 28, you should use 'acceptTokenOwnership' instead"
            },
            "functionSelector": "cdc91c69",
            "id": 9405,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9386,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9385,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "11690:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11690:9:8"
              }
            ],
            "name": "acceptAnchorOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9384,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11681:8:8"
            },
            "parameters": {
              "id": 9383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11663:2:8"
            },
            "returnParameters": {
              "id": 9387,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11700:0:8"
            },
            "scope": 10039,
            "src": "11633:276:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9425,
              "nodeType": "Block",
              "src": "12315:62:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9420,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9408,
                        "src": "12348:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9421,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9410,
                        "src": "12356:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9422,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9412,
                        "src": "12361:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9417,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "12326:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22906,
                      "src": "12326:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,address,uint256) external"
                      }
                    },
                    "id": 9423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12326:43:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9424,
                  "nodeType": "ExpressionStatement",
                  "src": "12326:43:8"
                }
              ]
            },
            "documentation": {
              "id": 9406,
              "nodeType": "StructuredDocumentation",
              "src": "11917:297:8",
              "text": " @dev withdraws tokens held by the anchor and sends them to an account\n can only be called by the owner\n @param _token   ERC20 token contract address\n @param _to      account to receive the new amount\n @param _amount  amount to withdraw"
            },
            "functionSelector": "395900d4",
            "id": 9426,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9414,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "12305:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12305:9:8"
              }
            ],
            "name": "withdrawFromAnchor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9408,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12248:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9407,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "12248:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9410,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12268:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12268:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9412,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12281:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12281:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12247:50:8"
            },
            "returnParameters": {
              "id": 9416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12315:0:8"
            },
            "scope": 10039,
            "src": "12220:157:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13266
            ],
            "body": {
              "id": 9451,
              "nodeType": "Block",
              "src": "12655:199:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9436,
                          "name": "_conversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9429,
                          "src": "12674:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9437,
                          "name": "maxConversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9047,
                          "src": "12692:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "12674:34:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
                        "id": 9439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12710:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        },
                        "value": "ERR_INVALID_CONVERSION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        }
                      ],
                      "id": 9435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12666:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12666:73:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9441,
                  "nodeType": "ExpressionStatement",
                  "src": "12666:73:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9443,
                        "name": "conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9051,
                        "src": "12775:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9444,
                        "name": "_conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9429,
                        "src": "12790:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9442,
                      "name": "ConversionFeeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9096,
                      "src": "12755:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (uint32,uint32)"
                      }
                    },
                    "id": 9445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12755:50:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9446,
                  "nodeType": "EmitStatement",
                  "src": "12750:55:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9447,
                      "name": "conversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9051,
                      "src": "12816:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9448,
                      "name": "_conversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9429,
                      "src": "12832:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "12816:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9450,
                  "nodeType": "ExpressionStatement",
                  "src": "12816:30:8"
                }
              ]
            },
            "documentation": {
              "id": 9427,
              "nodeType": "StructuredDocumentation",
              "src": "12385:189:8",
              "text": " @dev updates the current conversion fee\n can only be called by the contract owner\n @param _conversionFee new conversion fee, represented in ppm"
            },
            "functionSelector": "ecbca55d",
            "id": 9452,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9433,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9432,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "12645:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12645:9:8"
              }
            ],
            "name": "setConversionFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9431,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12636:8:8"
            },
            "parameters": {
              "id": 9430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9429,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9452,
                  "src": "12606:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9428,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12606:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12605:23:8"
            },
            "returnParameters": {
              "id": 9434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12655:0:8"
            },
            "scope": 10039,
            "src": "12580:274:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13280,
              22574
            ],
            "body": {
              "id": 9509,
              "nodeType": "Block",
              "src": "13506:559:8",
              "statements": [
                {
                  "assignments": [
                    9470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9470,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9509,
                      "src": "13517:25:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9469,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13517:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9474,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9472,
                        "name": "CONVERTER_UPGRADER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21542,
                        "src": "13555:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 9471,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21718,
                      "src": "13545:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 9473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13545:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13517:57:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 9484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "13764:23:8",
                            "subExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 9476,
                                  "name": "reserves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9040,
                                  "src": "13765:8:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                                    "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                  }
                                },
                                "id": 9478,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 9477,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9455,
                                  "src": "13774:6:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                    "typeString": "contract IERC20Token"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13765:16:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                  "typeString": "struct ConverterBase.Reserve storage ref"
                                }
                              },
                              "id": 9479,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isSet",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9022,
                              "src": "13765:22:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "13791:11:8",
                            "subExpression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9481,
                                "name": "isActive",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9362,
                                "src": "13792:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 9482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13792:10:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "13764:38:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9485,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "13806:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9486,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9470,
                            "src": "13815:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13806:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "13764:68:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 9489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13834:19:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 9475,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13756:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13756:98:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9491,
                  "nodeType": "ExpressionStatement",
                  "src": "13756:98:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9495,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9455,
                        "src": "13886:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9496,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9457,
                        "src": "13894:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9497,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9459,
                        "src": "13899:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9492,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "13865:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_ConverterBase_$10039",
                          "typeString": "contract super ConverterBase"
                        }
                      },
                      "id": 9494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22574,
                      "src": "13865:20:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,address,uint256)"
                      }
                    },
                    "id": 9498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13865:42:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9499,
                  "nodeType": "ExpressionStatement",
                  "src": "13865:42:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9500,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "13994:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9502,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9501,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9455,
                        "src": "14003:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "13994:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9503,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9022,
                    "src": "13994:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9508,
                  "nodeType": "IfStatement",
                  "src": "13990:67:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9505,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9455,
                          "src": "14050:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        ],
                        "id": 9504,
                        "name": "syncReserveBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9844,
                        "src": "14031:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                          "typeString": "function (contract IERC20Token)"
                        }
                      },
                      "id": 9506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14031:26:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9507,
                    "nodeType": "ExpressionStatement",
                    "src": "14031:26:8"
                  }
                }
              ]
            },
            "documentation": {
              "id": 9453,
              "nodeType": "StructuredDocumentation",
              "src": "12862:462:8",
              "text": " @dev withdraws tokens held by the converter and sends them to an account\n can only be called by the owner\n note that reserve tokens can only be withdrawn by the owner while the converter is inactive\n unless the owner is the converter upgrader contract\n @param _token   ERC20 token contract address\n @param _to      account to receive the new amount\n @param _amount  amount to withdraw"
            },
            "functionSelector": "5e35359e",
            "id": 9510,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9465,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9464,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "13472:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13472:9:8"
              },
              {
                "arguments": null,
                "id": 9467,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9466,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "13491:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13491:9:8"
              }
            ],
            "name": "withdrawTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9463,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "contractScope": null,
                  "id": 9461,
                  "name": "IConverter",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 13340,
                  "src": "13438:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverter_$13340",
                    "typeString": "contract IConverter"
                  }
                },
                {
                  "contractScope": null,
                  "id": 9462,
                  "name": "TokenHolder",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22575,
                  "src": "13450:11:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TokenHolder_$22575",
                    "typeString": "contract TokenHolder"
                  }
                }
              ],
              "src": "13429:33:8"
            },
            "parameters": {
              "id": 9460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9455,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13354:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9454,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "13354:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9457,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13374:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13374:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9459,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13387:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13387:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13353:50:8"
            },
            "returnParameters": {
              "id": 9468,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13506:0:8"
            },
            "scope": 10039,
            "src": "13330:735:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9547,
              "nodeType": "Block",
              "src": "14324:338:8",
              "statements": [
                {
                  "assignments": [
                    9517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9517,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9547,
                      "src": "14335:36:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                        "typeString": "contract IConverterUpgrader"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9516,
                        "name": "IConverterUpgrader",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13660,
                        "src": "14335:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                          "typeString": "contract IConverterUpgrader"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9523,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9520,
                            "name": "CONVERTER_UPGRADER",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21542,
                            "src": "14403:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 9519,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21718,
                          "src": "14393:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 9521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14393:29:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9518,
                      "name": "IConverterUpgrader",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13660,
                      "src": "14374:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IConverterUpgrader_$13660_$",
                        "typeString": "type(contract IConverterUpgrader)"
                      }
                    },
                    "id": 9522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14374:49:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                      "typeString": "contract IConverterUpgrader"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14335:88:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9525,
                          "name": "converterType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9242,
                          "src": "14492:13:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                            "typeString": "function () pure returns (uint16)"
                          }
                        },
                        "id": 9526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14492:15:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9527,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "14509:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14517:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 9524,
                      "name": "Activation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9063,
                      "src": "14481:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
                        "typeString": "function (uint16,contract IConverterAnchor,bool)"
                      }
                    },
                    "id": 9529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14481:42:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9530,
                  "nodeType": "EmitStatement",
                  "src": "14476:47:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9534,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9517,
                            "src": "14562:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                              "typeString": "contract IConverterUpgrader"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                              "typeString": "contract IConverterUpgrader"
                            }
                          ],
                          "id": 9533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14554:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 9532,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14554:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 9535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14554:26:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9531,
                      "name": "transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21787,
                      "src": "14536:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14536:45:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9537,
                  "nodeType": "ExpressionStatement",
                  "src": "14536:45:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9541,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9027,
                        "src": "14618:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9538,
                        "name": "converterUpgrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9517,
                        "src": "14592:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                          "typeString": "contract IConverterUpgrader"
                        }
                      },
                      "id": 9540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "upgrade",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13659,
                      "src": "14592:25:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint16_$returns$__$",
                        "typeString": "function (uint16) external"
                      }
                    },
                    "id": 9542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14592:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9543,
                  "nodeType": "ExpressionStatement",
                  "src": "14592:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9544,
                      "name": "acceptOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21817,
                      "src": "14637:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14637:17:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9546,
                  "nodeType": "ExpressionStatement",
                  "src": "14637:17:8"
                }
              ]
            },
            "documentation": {
              "id": 9511,
              "nodeType": "StructuredDocumentation",
              "src": "14073:209:8",
              "text": " @dev upgrades the converter to the latest version\n can only be called by the owner\n note that the owner needs to call acceptOwnership on the new converter after the upgrade"
            },
            "functionSelector": "d55ec697",
            "id": 9548,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9514,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9513,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "14314:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14314:9:8"
              }
            ],
            "name": "upgrade",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9512,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14304:2:8"
            },
            "returnParameters": {
              "id": 9515,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14324:0:8"
            },
            "scope": 10039,
            "src": "14288:374:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9560,
              "nodeType": "Block",
              "src": "14940:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9556,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "14965:13:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 9557,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "14965:20:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14958:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 9554,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "14958:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14958:28:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 9553,
                  "id": 9559,
                  "nodeType": "Return",
                  "src": "14951:35:8"
                }
              ]
            },
            "documentation": {
              "id": 9549,
              "nodeType": "StructuredDocumentation",
              "src": "14670:206:8",
              "text": " @dev returns the number of reserve tokens defined\n note that prior to version 17, you should use 'connectorTokenCount' instead\n @return number of reserve tokens"
            },
            "functionSelector": "9b99a8e2",
            "id": 9561,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reserveTokenCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9550,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14908:2:8"
            },
            "returnParameters": {
              "id": 9553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9552,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9561,
                  "src": "14932:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9551,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "14932:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14931:8:8"
            },
            "scope": 10039,
            "src": "14882:112:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13292
            ],
            "body": {
              "id": 9663,
              "nodeType": "Block",
              "src": "15545:544:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9592,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9564,
                                "src": "15599:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              ],
                              "id": 9591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15591:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9590,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15591:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15591:15:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9596,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "15618:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 9595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15610:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9594,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15610:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15610:15:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "15591:34:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "15629:23:8",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 9599,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "15630:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 9601,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 9600,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9564,
                                "src": "15639:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15630:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 9602,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9022,
                            "src": "15630:22:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "15591:61:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15654:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9589,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15583:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15583:93:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9607,
                  "nodeType": "ExpressionStatement",
                  "src": "15583:93:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9609,
                          "name": "_weight",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9566,
                          "src": "15695:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9610,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "15706:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9611,
                            "name": "reserveRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9043,
                            "src": "15723:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "15706:29:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "15695:40:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
                        "id": 9614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15737:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        },
                        "value": "ERR_INVALID_RESERVE_WEIGHT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        }
                      ],
                      "id": 9608,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15687:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15687:79:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9616,
                  "nodeType": "ExpressionStatement",
                  "src": "15687:79:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 9625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9618,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "15785:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 9619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15785:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "15814:2:8",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 9622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15815:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 9621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15807:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint16_$",
                              "typeString": "type(uint16)"
                            },
                            "typeName": {
                              "id": 9620,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "15807:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15807:10:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "15785:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 9626,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15819:27:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 9617,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15777:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15777:70:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9628,
                  "nodeType": "ExpressionStatement",
                  "src": "15777:70:8"
                },
                {
                  "assignments": [
                    9630
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9630,
                      "mutability": "mutable",
                      "name": "newReserve",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9663,
                      "src": "15860:26:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                        "typeString": "struct ConverterBase.Reserve"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9629,
                        "name": "Reserve",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9023,
                        "src": "15860:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9634,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9631,
                      "name": "reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9040,
                      "src": "15889:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                        "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                      }
                    },
                    "id": 9633,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9632,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9564,
                      "src": "15898:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15889:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                      "typeString": "struct ConverterBase.Reserve storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15860:45:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9635,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15916:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9637,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "15916:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15937:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15916:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9640,
                  "nodeType": "ExpressionStatement",
                  "src": "15916:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9641,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15949:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "weight",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9016,
                      "src": "15949:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9644,
                      "name": "_weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9566,
                      "src": "15969:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "15949:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9646,
                  "nodeType": "ExpressionStatement",
                  "src": "15949:27:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9647,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15987:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9649,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9022,
                      "src": "15987:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 9650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16006:4:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15987:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9652,
                  "nodeType": "ExpressionStatement",
                  "src": "15987:23:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9656,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "16040:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9653,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "16021:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 9655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16021:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 9657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16021:26:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9658,
                  "nodeType": "ExpressionStatement",
                  "src": "16021:26:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9659,
                      "name": "reserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9043,
                      "src": "16058:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9660,
                      "name": "_weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9566,
                      "src": "16074:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "16058:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9662,
                  "nodeType": "ExpressionStatement",
                  "src": "16058:23:8"
                }
              ]
            },
            "documentation": {
              "id": 9562,
              "nodeType": "StructuredDocumentation",
              "src": "15002:278:8",
              "text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive\n @param _token   address of the reserve token\n @param _weight  reserve weight, represented in ppm, 1-1000000"
            },
            "functionSelector": "6a49d2c4",
            "id": 9664,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9570,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9569,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "15402:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15402:9:8"
              },
              {
                "arguments": null,
                "id": 9572,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9571,
                  "name": "inactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9151,
                  "src": "15421:8:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15421:8:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9576,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "15460:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15452:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9574,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15452:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15452:15:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9578,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9573,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "15439:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15439:29:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9582,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "15494:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15486:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9580,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15486:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15486:15:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9584,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9579,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22644,
                  "src": "15478:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15478:24:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9586,
                    "name": "_weight",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9566,
                    "src": "15531:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 9587,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9585,
                  "name": "validReserveWeight",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9219,
                  "src": "15512:18:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint32_$",
                    "typeString": "modifier (uint32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15512:27:8"
              }
            ],
            "name": "addReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9568,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15384:8:8"
            },
            "parameters": {
              "id": 9567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9564,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9664,
                  "src": "15306:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9563,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "15306:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9566,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9664,
                  "src": "15326:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9565,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15326:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15305:36:8"
            },
            "returnParameters": {
              "id": 9588,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15545:0:8"
            },
            "scope": 10039,
            "src": "15286:803:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9680,
              "nodeType": "Block",
              "src": "16448:56:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9675,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16466:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9677,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9676,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9667,
                        "src": "16475:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16466:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9678,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "weight",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9016,
                    "src": "16466:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 9674,
                  "id": 9679,
                  "nodeType": "Return",
                  "src": "16459:37:8"
                }
              ]
            },
            "documentation": {
              "id": 9665,
              "nodeType": "StructuredDocumentation",
              "src": "16097:197:8",
              "text": " @dev returns the reserve's weight\n added in version 28\n @param _reserveToken    reserve token contract address\n @return reserve weight"
            },
            "functionSelector": "1cfab290",
            "id": 9681,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9670,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9667,
                    "src": "16402:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9671,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9669,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "16389:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16389:27:8"
              }
            ],
            "name": "reserveWeight",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9667,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9681,
                  "src": "16323:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9666,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "16323:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16322:27:8"
            },
            "returnParameters": {
              "id": 9674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9673,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9681,
                  "src": "16435:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9672,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16435:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16434:8:8"
            },
            "scope": 10039,
            "src": "16300:204:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13250
            ],
            "body": {
              "id": 9698,
              "nodeType": "Block",
              "src": "16941:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9693,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16959:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9695,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9694,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9684,
                        "src": "16968:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16959:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9696,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9014,
                    "src": "16959:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9692,
                  "id": 9697,
                  "nodeType": "Return",
                  "src": "16952:38:8"
                }
              ]
            },
            "documentation": {
              "id": 9682,
              "nodeType": "StructuredDocumentation",
              "src": "16512:255:8",
              "text": " @dev returns the reserve's balance\n note that prior to version 17, you should use 'getConnectorBalance' instead\n @param _reserveToken    reserve token contract address\n @return reserve balance"
            },
            "functionSelector": "dc8de379",
            "id": 9699,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9688,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9684,
                    "src": "16894:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9689,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9687,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "16881:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16881:27:8"
              }
            ],
            "name": "reserveBalance",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9686,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16849:8:8"
            },
            "parameters": {
              "id": 9685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9684,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9699,
                  "src": "16797:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9683,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "16797:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16796:27:8"
            },
            "returnParameters": {
              "id": 9692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9691,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9699,
                  "src": "16927:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16927:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16926:9:8"
            },
            "scope": 10039,
            "src": "16773:225:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9710,
              "nodeType": "Block",
              "src": "17228:61:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9705,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "17246:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9707,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9706,
                        "name": "ETH_RESERVE_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9012,
                        "src": "17255:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17246:29:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9708,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9022,
                    "src": "17246:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9704,
                  "id": 9709,
                  "nodeType": "Return",
                  "src": "17239:42:8"
                }
              ]
            },
            "documentation": {
              "id": 9700,
              "nodeType": "StructuredDocumentation",
              "src": "17006:164:8",
              "text": " @dev checks whether or not the converter has an ETH reserve\n @return true if the converter has an ETH reserve, false otherwise"
            },
            "functionSelector": "12c2aca4",
            "id": 9711,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasETHReserve",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9701,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17198:2:8"
            },
            "returnParameters": {
              "id": 9704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9703,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9711,
                  "src": "17222:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9702,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17222:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17221:6:8"
            },
            "scope": 10039,
            "src": "17176:113:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13228
            ],
            "body": {
              "id": 9772,
              "nodeType": "Block",
              "src": "18137:517:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        "id": 9736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9734,
                          "name": "_sourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9714,
                          "src": "18183:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9735,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9716,
                          "src": "18199:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "src": "18183:28:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f53414d455f534f555243455f544152474554",
                        "id": 9737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18213:24:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        },
                        "value": "ERR_SAME_SOURCE_TARGET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        }
                      ],
                      "id": 9733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18175:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18175:63:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9739,
                  "nodeType": "ExpressionStatement",
                  "src": "18175:63:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9743,
                                "name": "conversionWhitelist",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9033,
                                "src": "18366:19:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                  "typeString": "contract IWhitelist"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                  "typeString": "contract IWhitelist"
                                }
                              ],
                              "id": 9742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18358:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9741,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18358:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18358:28:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 9747,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18398:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 9746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18390:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9745,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18390:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18390:10:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "18358:42:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 9758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9752,
                                    "name": "_trader",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9720,
                                    "src": "18456:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9750,
                                    "name": "conversionWhitelist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9033,
                                    "src": "18422:19:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                      "typeString": "contract IWhitelist"
                                    }
                                  },
                                  "id": 9751,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isWhitelisted",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22916,
                                  "src": "18422:33:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) view external returns (bool)"
                                  }
                                },
                                "id": 9753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18422:42:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9756,
                                    "name": "_beneficiary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9722,
                                    "src": "18502:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9754,
                                    "name": "conversionWhitelist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9033,
                                    "src": "18468:19:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                      "typeString": "contract IWhitelist"
                                    }
                                  },
                                  "id": 9755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isWhitelisted",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22916,
                                  "src": "18468:33:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) view external returns (bool)"
                                  }
                                },
                                "id": 9757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18468:47:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "18422:93:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9759,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "18421:95:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18358:158:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4e4f545f57484954454c4953544544",
                        "id": 9761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18535:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
                          "typeString": "literal_string \"ERR_NOT_WHITELISTED\""
                        },
                        "value": "ERR_NOT_WHITELISTED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
                          "typeString": "literal_string \"ERR_NOT_WHITELISTED\""
                        }
                      ],
                      "id": 9740,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18350:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18350:207:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9763,
                  "nodeType": "ExpressionStatement",
                  "src": "18350:207:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9765,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9714,
                        "src": "18587:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9766,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9716,
                        "src": "18601:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9767,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9718,
                        "src": "18615:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9768,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9720,
                        "src": "18624:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9769,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9722,
                        "src": "18633:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 9764,
                      "name": "doConvert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9789,
                      "src": "18577:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,address,address payable) returns (uint256)"
                      }
                    },
                    "id": 9770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18577:69:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9732,
                  "id": 9771,
                  "nodeType": "Return",
                  "src": "18570:76:8"
                }
              ]
            },
            "documentation": {
              "id": 9712,
              "nodeType": "StructuredDocumentation",
              "src": "17297:569:8",
              "text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "functionSelector": "e8dc12ff",
            "id": 9773,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9726,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9725,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "18065:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18065:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9728,
                    "name": "BANCOR_NETWORK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21530,
                    "src": "18089:14:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9727,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21577,
                  "src": "18084:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18084:20:8"
              }
            ],
            "name": "convert",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9724,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18030:8:8"
            },
            "parameters": {
              "id": 9723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9714,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17889:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9713,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "17889:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9716,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17915:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9715,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "17915:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9718,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17941:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17941:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9720,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17958:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17958:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9722,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17975:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17975:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17888:116:8"
            },
            "returnParameters": {
              "id": 9732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9731,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "18123:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9730,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18122:9:8"
            },
            "scope": 10039,
            "src": "17872:782:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": {
              "id": 9774,
              "nodeType": "StructuredDocumentation",
              "src": "18662:615:8",
              "text": " @dev converts a specific amount of source tokens to target tokens\n called by ConverterBase and allows the inherited contracts to implement custom conversion logic\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "id": 9789,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doConvert",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9776,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19312:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9775,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "19312:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9778,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19347:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9777,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "19347:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9780,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19382:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9779,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19382:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9782,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19408:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19408:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9784,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19434:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9783,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19301:162:8"
            },
            "returnParameters": {
              "id": 9788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9787,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19517:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19517:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19516:9:8"
            },
            "scope": 10039,
            "src": "19283:243:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9805,
              "nodeType": "Block",
              "src": "19790:78:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9802,
                        "name": "PPM_RESOLUTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9007,
                        "src": "19845:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9799,
                            "name": "conversionFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9051,
                            "src": "19826:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9797,
                            "name": "_targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9792,
                            "src": "19808:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22327,
                          "src": "19808:17:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 9800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19808:32:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22353,
                      "src": "19808:36:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 9803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19808:52:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9796,
                  "id": 9804,
                  "nodeType": "Return",
                  "src": "19801:59:8"
                }
              ]
            },
            "documentation": {
              "id": 9790,
              "nodeType": "StructuredDocumentation",
              "src": "19534:173:8",
              "text": " @dev returns the conversion fee for a given target amount\n @param _targetAmount  target amount\n @return conversion fee"
            },
            "id": 9806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9793,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9792,
                  "mutability": "mutable",
                  "name": "_targetAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9806,
                  "src": "19735:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9791,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19735:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19734:23:8"
            },
            "returnParameters": {
              "id": 9796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9795,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9806,
                  "src": "19781:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19781:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19780:9:8"
            },
            "scope": 10039,
            "src": "19713:155:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9843,
              "nodeType": "Block",
              "src": "20153:230:8",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 9817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9815,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9809,
                      "src": "20168:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9816,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "20185:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "20168:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9829,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "20303:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9831,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9830,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20312:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20303:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9832,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "20303:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9837,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "20369:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                  "typeString": "contract ConverterBase"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                  "typeString": "contract ConverterBase"
                                }
                              ],
                              "id": 9836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20361:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9835,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "20361:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20361:13:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9833,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20337:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "id": 9834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21088,
                          "src": "20337:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 9839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20337:38:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20303:72:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9841,
                    "nodeType": "ExpressionStatement",
                    "src": "20303:72:8"
                  },
                  "id": 9842,
                  "nodeType": "IfStatement",
                  "src": "20164:211:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9818,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "20219:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9820,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9819,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20228:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20219:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9821,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "20219:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9824,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "20261:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            ],
                            "id": 9823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20253:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 9822,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "20253:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20253:13:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 9826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20253:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20219:55:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9828,
                    "nodeType": "ExpressionStatement",
                    "src": "20219:55:8"
                  }
                }
              ]
            },
            "documentation": {
              "id": 9807,
              "nodeType": "StructuredDocumentation",
              "src": "19876:179:8",
              "text": " @dev syncs the stored reserve balance for a given reserve with the real reserve balance\n @param _reserveToken    address of the reserve token"
            },
            "id": 9844,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9812,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9809,
                    "src": "20138:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9813,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9811,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "20125:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20125:27:8"
              }
            ],
            "name": "syncReserveBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9809,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9844,
                  "src": "20089:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9808,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "20089:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20088:27:8"
            },
            "returnParameters": {
              "id": 9814,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20153:0:8"
            },
            "scope": 10039,
            "src": "20061:322:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9870,
              "nodeType": "Block",
              "src": "20496:165:8",
              "statements": [
                {
                  "assignments": [
                    9849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9849,
                      "mutability": "mutable",
                      "name": "reserveCount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9870,
                      "src": "20507:20:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9848,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20507:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9852,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 9850,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9036,
                      "src": "20530:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 9851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "20530:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20507:43:8"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9864,
                            "name": "reserveTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9036,
                            "src": "20636:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                              "typeString": "contract IERC20Token[] storage ref"
                            }
                          },
                          "id": 9866,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9865,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9854,
                            "src": "20650:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20636:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        ],
                        "id": 9863,
                        "name": "syncReserveBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9844,
                        "src": "20617:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                          "typeString": "function (contract IERC20Token)"
                        }
                      },
                      "id": 9867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20617:36:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9868,
                    "nodeType": "ExpressionStatement",
                    "src": "20617:36:8"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9857,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9854,
                      "src": "20581:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9858,
                      "name": "reserveCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9849,
                      "src": "20585:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20581:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9869,
                  "initializationExpression": {
                    "assignments": [
                      9854
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 9854,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 9869,
                        "src": "20566:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9853,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20566:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 9856,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20578:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "20566:13:8"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "20599:3:8",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 9860,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9854,
                        "src": "20599:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9862,
                    "nodeType": "ExpressionStatement",
                    "src": "20599:3:8"
                  },
                  "nodeType": "ForStatement",
                  "src": "20561:92:8"
                }
              ]
            },
            "documentation": {
              "id": 9845,
              "nodeType": "StructuredDocumentation",
              "src": "20391:59:8",
              "text": " @dev syncs all stored reserve balances"
            },
            "id": 9871,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "syncReserveBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20484:2:8"
            },
            "returnParameters": {
              "id": 9847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20496:0:8"
            },
            "scope": 10039,
            "src": "20456:205:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9907,
              "nodeType": "Block",
              "src": "21324:518:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9888,
                          "name": "_feeAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9884,
                          "src": "21705:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          },
                          "id": 9891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 9889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21718:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "323535",
                            "id": 9890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21723:3:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255_by_1",
                              "typeString": "int_const 255"
                            },
                            "value": "255"
                          },
                          "src": "21718:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          }
                        },
                        "src": "21705:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 9887,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "21698:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 9893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21698:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9894,
                  "nodeType": "ExpressionStatement",
                  "src": "21698:29:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9896,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9874,
                        "src": "21754:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9897,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9876,
                        "src": "21768:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9898,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9878,
                        "src": "21782:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9899,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9880,
                        "src": "21791:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9900,
                        "name": "_returnAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9882,
                        "src": "21800:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9903,
                            "name": "_feeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9884,
                            "src": "21822:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 9902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21815:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": {
                            "id": 9901,
                            "name": "int256",
                            "nodeType": "ElementaryTypeName",
                            "src": "21815:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 9904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21815:18:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 9895,
                      "name": "Conversion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9078,
                      "src": "21743:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$_t_uint256_$_t_int256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,int256)"
                      }
                    },
                    "id": 9905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21743:91:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9906,
                  "nodeType": "EmitStatement",
                  "src": "21738:96:8"
                }
              ]
            },
            "documentation": {
              "id": 9872,
              "nodeType": "StructuredDocumentation",
              "src": "20669:409:8",
              "text": " @dev helper, dispatches the Conversion event\n @param _sourceToken     source ERC20 token\n @param _targetToken     target ERC20 token\n @param _trader          address of the caller who executed the conversion\n @param _amount          amount purchased/sold (in the source token)\n @param _returnAmount    amount returned (in the target token)"
            },
            "id": 9908,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchConversionEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9874,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21127:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9873,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "21127:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9876,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21162:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9875,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "21162:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9878,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21197:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21197:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9880,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21223:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21223:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9882,
                  "mutability": "mutable",
                  "name": "_returnAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21249:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9881,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21249:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9884,
                  "mutability": "mutable",
                  "name": "_feeAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21281:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21281:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21116:184:8"
            },
            "returnParameters": {
              "id": 9886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21324:0:8"
            },
            "scope": 10039,
            "src": "21084:758:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              13297
            ],
            "body": {
              "id": 9917,
              "nodeType": "Block",
              "src": "22030:32:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9915,
                    "name": "anchor",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9030,
                    "src": "22048:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "functionReturnParameters": 9914,
                  "id": 9916,
                  "nodeType": "Return",
                  "src": "22041:13:8"
                }
              ]
            },
            "documentation": {
              "id": 9909,
              "nodeType": "StructuredDocumentation",
              "src": "21850:109:8",
              "text": " @dev deprecated since version 28, backward compatibility - use only for earlier versions"
            },
            "functionSelector": "fc0c546a",
            "id": 9918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9911,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21994:8:8"
            },
            "parameters": {
              "id": 9910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21979:2:8"
            },
            "returnParameters": {
              "id": 9914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9913,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9918,
                  "src": "22012:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9912,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "22012:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22011:18:8"
            },
            "scope": 10039,
            "src": "21965:97:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13302
            ],
            "body": {
              "id": 9931,
              "nodeType": "Block",
              "src": "22213:53:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9928,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9921,
                        "src": "22248:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9927,
                      "name": "transferAnchorOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9381,
                      "src": "22224:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22224:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9930,
                  "nodeType": "ExpressionStatement",
                  "src": "22224:34:8"
                }
              ]
            },
            "documentation": {
              "id": 9919,
              "nodeType": "StructuredDocumentation",
              "src": "22070:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "21e6b53d",
            "id": 9932,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9925,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9924,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "22203:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22203:9:8"
              }
            ],
            "name": "transferTokenOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9923,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22194:8:8"
            },
            "parameters": {
              "id": 9922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9921,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9932,
                  "src": "22168:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22168:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22167:19:8"
            },
            "returnParameters": {
              "id": 9926,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22213:0:8"
            },
            "scope": 10039,
            "src": "22136:130:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13305
            ],
            "body": {
              "id": 9942,
              "nodeType": "Block",
              "src": "22398:42:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9939,
                      "name": "acceptAnchorOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9405,
                      "src": "22409:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22409:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9941,
                  "nodeType": "ExpressionStatement",
                  "src": "22409:23:8"
                }
              ]
            },
            "documentation": {
              "id": 9933,
              "nodeType": "StructuredDocumentation",
              "src": "22274:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "38a5e016",
            "id": 9943,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9936,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "22388:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22388:9:8"
              }
            ],
            "name": "acceptTokenOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9935,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22379:8:8"
            },
            "parameters": {
              "id": 9934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22369:2:8"
            },
            "returnParameters": {
              "id": 9938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22398:0:8"
            },
            "scope": 10039,
            "src": "22340:100:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13320
            ],
            "body": {
              "id": 9976,
              "nodeType": "Block",
              "src": "22621:141:8",
              "statements": [
                {
                  "assignments": [
                    9961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9961,
                      "mutability": "mutable",
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9976,
                      "src": "22632:22:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                        "typeString": "struct ConverterBase.Reserve"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9960,
                        "name": "Reserve",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9023,
                        "src": "22632:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9965,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9962,
                      "name": "reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9040,
                      "src": "22657:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                        "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                      }
                    },
                    "id": 9964,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9963,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9946,
                      "src": "22666:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22657:18:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                      "typeString": "struct ConverterBase.Reserve storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22632:43:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9966,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22693:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9967,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "22693:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9968,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22710:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9969,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "weight",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9016,
                        "src": "22710:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22726:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22733:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9972,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22740:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9973,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "22740:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 9974,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "22692:62:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$_t_bool_$_t_bool_$_t_bool_$",
                      "typeString": "tuple(uint256,uint32,bool,bool,bool)"
                    }
                  },
                  "functionReturnParameters": 9959,
                  "id": 9975,
                  "nodeType": "Return",
                  "src": "22686:68:8"
                }
              ]
            },
            "documentation": {
              "id": 9944,
              "nodeType": "StructuredDocumentation",
              "src": "22448:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "0e53aae9",
            "id": 9977,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectors",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9948,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22568:8:8"
            },
            "parameters": {
              "id": 9947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9946,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22534:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9945,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "22534:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22533:22:8"
            },
            "returnParameters": {
              "id": 9959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9950,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22586:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22586:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9952,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22595:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9951,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22595:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9954,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22603:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9953,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22603:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9956,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22609:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9955,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22609:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9958,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22615:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9957,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22615:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22585:35:8"
            },
            "scope": 10039,
            "src": "22514:248:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13334
            ],
            "body": {
              "id": 9991,
              "nodeType": "Block",
              "src": "22920:61:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9986,
                        "name": "ConverterBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10039,
                        "src": "22938:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ConverterBase_$10039_$",
                          "typeString": "type(contract ConverterBase)"
                        }
                      },
                      "id": 9987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "reserveTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9036,
                      "src": "22938:27:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 9989,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9988,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9980,
                      "src": "22966:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22938:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "functionReturnParameters": 9985,
                  "id": 9990,
                  "nodeType": "Return",
                  "src": "22931:42:8"
                }
              ]
            },
            "documentation": {
              "id": 9978,
              "nodeType": "StructuredDocumentation",
              "src": "22770:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "19b64015",
            "id": 9992,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectorTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9982,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22889:8:8"
            },
            "parameters": {
              "id": 9981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9980,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9992,
                  "src": "22861:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9979,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22861:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22860:16:8"
            },
            "returnParameters": {
              "id": 9985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9984,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9992,
                  "src": "22907:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9983,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "22907:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22906:13:8"
            },
            "scope": 10039,
            "src": "22836:145:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13339
            ],
            "body": {
              "id": 10002,
              "nodeType": "Block",
              "src": "23124:45:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9999,
                      "name": "reserveTokenCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9561,
                      "src": "23142:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                        "typeString": "function () view returns (uint16)"
                      }
                    },
                    "id": 10000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23142:19:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 9998,
                  "id": 10001,
                  "nodeType": "Return",
                  "src": "23135:26:8"
                }
              ]
            },
            "documentation": {
              "id": 9993,
              "nodeType": "StructuredDocumentation",
              "src": "22989:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "71f52bf3",
            "id": 10003,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectorTokenCount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9995,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23098:8:8"
            },
            "parameters": {
              "id": 9994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23083:2:8"
            },
            "returnParameters": {
              "id": 9998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9997,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10003,
                  "src": "23116:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9996,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "23116:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23115:8:8"
            },
            "scope": 10039,
            "src": "23055:114:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13327
            ],
            "body": {
              "id": 10016,
              "nodeType": "Block",
              "src": "23340:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10013,
                        "name": "_connectorToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10006,
                        "src": "23373:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 10012,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "23358:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 10014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23358:31:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10011,
                  "id": 10015,
                  "nodeType": "Return",
                  "src": "23351:38:8"
                }
              ]
            },
            "documentation": {
              "id": 10004,
              "nodeType": "StructuredDocumentation",
              "src": "23177:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "d8959512",
            "id": 10017,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getConnectorBalance",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10008,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23313:8:8"
            },
            "parameters": {
              "id": 10007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10006,
                  "mutability": "mutable",
                  "name": "_connectorToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10017,
                  "src": "23272:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10005,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23272:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23271:29:8"
            },
            "returnParameters": {
              "id": 10011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10010,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10017,
                  "src": "23331:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10009,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23331:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23330:9:8"
            },
            "scope": 10039,
            "src": "23243:154:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10037,
              "nodeType": "Block",
              "src": "23598:81:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10032,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10020,
                        "src": "23635:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10033,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10022,
                        "src": "23649:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10034,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10024,
                        "src": "23663:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 10031,
                      "name": "targetAmountAndFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9256,
                      "src": "23616:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256) view returns (uint256,uint256)"
                      }
                    },
                    "id": 10035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23616:55:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 10030,
                  "id": 10036,
                  "nodeType": "Return",
                  "src": "23609:62:8"
                }
              ]
            },
            "documentation": {
              "id": 10018,
              "nodeType": "StructuredDocumentation",
              "src": "23405:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "1e1401f8",
            "id": 10038,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReturn",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10025,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10020,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23490:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10019,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23490:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10022,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23516:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10021,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23516:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10024,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23542:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10023,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23542:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23489:69:8"
            },
            "returnParameters": {
              "id": 10030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10027,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23580:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23580:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10029,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23589:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23589:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23579:18:8"
            },
            "scope": 10039,
            "src": "23471:208:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 10040,
        "src": "1648:22034:8"
      }
    ],
    "src": "52:23632:8"
  },
  "legacyAST": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol",
    "exportedSymbols": {
      "ConverterBase": [
        10039
      ]
    },
    "id": 10040,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8979,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:8"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol",
        "file": "./interfaces/IConverter.sol",
        "id": 8980,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13341,
        "src": "77:37:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol",
        "file": "./interfaces/IConverterAnchor.sol",
        "id": 8981,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13350,
        "src": "116:43:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol",
        "file": "./interfaces/IConverterUpgrader.sol",
        "id": 8982,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13661,
        "src": "161:45:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol",
        "file": "./interfaces/IBancorFormula.sol",
        "id": 8983,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 13178,
        "src": "208:41:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
        "file": "../utility/ContractRegistryClient.sol",
        "id": 8984,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 21720,
        "src": "251:47:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol",
        "file": "../utility/ReentrancyGuard.sol",
        "id": 8985,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22243,
        "src": "300:40:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol",
        "file": "../utility/SafeMath.sol",
        "id": 8986,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22355,
        "src": "342:33:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol",
        "file": "../utility/TokenHandler.sol",
        "id": 8987,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22527,
        "src": "377:37:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol",
        "file": "../utility/TokenHolder.sol",
        "id": 8988,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 22576,
        "src": "416:36:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol",
        "file": "../token/interfaces/IEtherToken.sol",
        "id": 8989,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 21154,
        "src": "454:45:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol",
        "file": "../bancorx/interfaces/IBancorX.sol",
        "id": 8990,
        "nodeType": "ImportDirective",
        "scope": 10040,
        "sourceUnit": 3552,
        "src": "501:44:8",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8992,
              "name": "IConverter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13340,
              "src": "1683:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConverter_$13340",
                "typeString": "contract IConverter"
              }
            },
            "id": 8993,
            "nodeType": "InheritanceSpecifier",
            "src": "1683:10:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8994,
              "name": "TokenHandler",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22526,
              "src": "1695:12:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenHandler_$22526",
                "typeString": "contract TokenHandler"
              }
            },
            "id": 8995,
            "nodeType": "InheritanceSpecifier",
            "src": "1695:12:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8996,
              "name": "TokenHolder",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22575,
              "src": "1709:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TokenHolder_$22575",
                "typeString": "contract TokenHolder"
              }
            },
            "id": 8997,
            "nodeType": "InheritanceSpecifier",
            "src": "1709:11:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8998,
              "name": "ContractRegistryClient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21719,
              "src": "1722:22:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContractRegistryClient_$21719",
                "typeString": "contract ContractRegistryClient"
              }
            },
            "id": 8999,
            "nodeType": "InheritanceSpecifier",
            "src": "1722:22:8"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9000,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22242,
              "src": "1746:15:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22242",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 9001,
            "nodeType": "InheritanceSpecifier",
            "src": "1746:15:8"
          }
        ],
        "contractDependencies": [
          13340,
          21719,
          21818,
          22242,
          22526,
          22575,
          22661,
          22847,
          22907
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 8991,
          "nodeType": "StructuredDocumentation",
          "src": "549:1097:8",
          "text": " @dev ConverterBase\n The converter contains the main logic for conversions between different ERC20 tokens.\n It is also the upgradable part of the mechanism (note that upgrades are opt-in).\n The anchor must be set on construction and cannot be changed afterwards.\n Wrappers are provided for some of the anchor's functions, for easier access.\n Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller\n and can execute any of its functions.\n To upgrade the converter, anchor ownership must be transferred to a new converter, along with\n any relevant data.\n Note that the converter can transfer anchor ownership to a new converter that\n doesn't allow upgrades anymore, for finalizing the relationship between the converter\n and the anchor.\n Converter types (defined as uint16 type) -\n 0 = liquid token converter\n 1 = liquidity pool v1 converter\n 2 = liquidity pool v2 converter\n Note that converters don't currently support tokens with transfer fees."
        },
        "fullyImplemented": false,
        "id": 10039,
        "linearizedBaseContracts": [
          10039,
          22242,
          21719,
          22575,
          22661,
          21818,
          22526,
          22907,
          13340,
          22847
        ],
        "name": "ConverterBase",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9004,
            "libraryName": {
              "contractScope": null,
              "id": 9002,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22354,
              "src": "1775:8:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22354",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1769:27:8",
            "typeName": {
              "id": 9003,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1788:7:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 9007,
            "mutability": "constant",
            "name": "PPM_RESOLUTION",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "1804:49:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9005,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "1804:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31303030303030",
              "id": 9006,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1846:7:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000_by_1",
                "typeString": "int_const 1000000"
              },
              "value": "1000000"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 9012,
            "mutability": "constant",
            "name": "ETH_RESERVE_ADDRESS",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "1860:107:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20Token_$21127",
              "typeString": "contract IERC20Token"
            },
            "typeName": {
              "contractScope": null,
              "id": 9008,
              "name": "IERC20Token",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21127,
              "src": "1860:11:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21127",
                "typeString": "contract IERC20Token"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "307845656565654565656545654565654565456545656545454565656565456565656565656545456545",
                  "id": 9010,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1924:42:8",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "value": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  }
                ],
                "id": 9009,
                "name": "IERC20Token",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 21127,
                "src": "1912:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_IERC20Token_$21127_$",
                  "typeString": "type(contract IERC20Token)"
                }
              },
              "id": 9011,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1912:55:8",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20Token_$21127",
                "typeString": "contract IERC20Token"
              }
            },
            "visibility": "internal"
          },
          {
            "canonicalName": "ConverterBase.Reserve",
            "id": 9023,
            "members": [
              {
                "constant": false,
                "id": 9014,
                "mutability": "mutable",
                "name": "balance",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2002:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 9013,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2002:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9016,
                "mutability": "mutable",
                "name": "weight",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2050:13:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 9015,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "2050:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9018,
                "mutability": "mutable",
                "name": "deprecated1",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2128:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9017,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2128:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9020,
                "mutability": "mutable",
                "name": "deprecated2",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2171:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9019,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2171:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 9022,
                "mutability": "mutable",
                "name": "isSet",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 9023,
                "src": "2214:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 9021,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2214:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Reserve",
            "nodeType": "StructDefinition",
            "scope": 10039,
            "src": "1976:313:8",
            "visibility": "public"
          },
          {
            "constant": true,
            "documentation": {
              "id": 9024,
              "nodeType": "StructuredDocumentation",
              "src": "2297:40:8",
              "text": " @dev version number"
            },
            "functionSelector": "54fd4d50",
            "id": 9027,
            "mutability": "constant",
            "name": "version",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2343:35:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 9025,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "2343:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3339",
              "id": 9026,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2376:2:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_39_by_1",
                "typeString": "int_const 39"
              },
              "value": "39"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13195
            ],
            "constant": false,
            "functionSelector": "d3fb73b4",
            "id": 9030,
            "mutability": "mutable",
            "name": "anchor",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9029,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2411:8:8"
            },
            "scope": 10039,
            "src": "2387:39:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
              "typeString": "contract IConverterAnchor"
            },
            "typeName": {
              "contractScope": null,
              "id": 9028,
              "name": "IConverterAnchor",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13349,
              "src": "2387:16:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                "typeString": "contract IConverterAnchor"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13233
            ],
            "constant": false,
            "functionSelector": "c45d3d92",
            "id": 9033,
            "mutability": "mutable",
            "name": "conversionWhitelist",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9032,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2491:8:8"
            },
            "scope": 10039,
            "src": "2473:46:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IWhitelist_$22917",
              "typeString": "contract IWhitelist"
            },
            "typeName": {
              "contractScope": null,
              "id": 9031,
              "name": "IWhitelist",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22917,
              "src": "2473:10:8",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IWhitelist_$22917",
                "typeString": "contract IWhitelist"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d031370b",
            "id": 9036,
            "mutability": "mutable",
            "name": "reserveTokens",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2613:34:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
              "typeString": "contract IERC20Token[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 9034,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21127,
                "src": "2613:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                  "typeString": "contract IERC20Token"
                }
              },
              "id": 9035,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "2613:13:8",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage_ptr",
                "typeString": "contract IERC20Token[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "d66bd524",
            "id": 9040,
            "mutability": "mutable",
            "name": "reserves",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2754:48:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
            },
            "typeName": {
              "id": 9039,
              "keyType": {
                "contractScope": null,
                "id": 9037,
                "name": "IERC20Token",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 21127,
                "src": "2763:11:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                  "typeString": "contract IERC20Token"
                }
              },
              "nodeType": "Mapping",
              "src": "2754:32:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve)"
              },
              "valueType": {
                "contractScope": null,
                "id": 9038,
                "name": "Reserve",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 9023,
                "src": "2778:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                  "typeString": "struct ConverterBase.Reserve"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "0c7d5cd8",
            "id": 9043,
            "mutability": "mutable",
            "name": "reserveRatio",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "2899:30:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9041,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "2899:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9042,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2928:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13243
            ],
            "constant": false,
            "functionSelector": "94c275ad",
            "id": 9047,
            "mutability": "mutable",
            "name": "maxConversionFee",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9045,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3055:8:8"
            },
            "scope": 10039,
            "src": "3041:43:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9044,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "3041:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9046,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3083:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13238
            ],
            "constant": false,
            "functionSelector": "579cd3ca",
            "id": 9051,
            "mutability": "mutable",
            "name": "conversionFee",
            "nodeType": "VariableDeclaration",
            "overrides": {
              "id": 9049,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3306:8:8"
            },
            "scope": 10039,
            "src": "3292:40:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 9048,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "3292:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30",
              "id": 9050,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3331:1:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "bf754558",
            "id": 9054,
            "mutability": "constant",
            "name": "conversionsEnabled",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 10039,
            "src": "3417:46:8",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 9052,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "3417:4:8",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "74727565",
              "id": 9053,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3459:4:8",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "true"
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9055,
              "nodeType": "StructuredDocumentation",
              "src": "3514:260:8",
              "text": " @dev triggered when the converter is activated\n @param _type        converter type\n @param _anchor      converter anchor\n @param _activated   true if the converter was activated, false if it was deactivated"
            },
            "id": 9063,
            "name": "Activation",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9062,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9057,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3797:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9056,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "3797:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9059,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3819:32:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9058,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "3819:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9061,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_activated",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9063,
                  "src": "3853:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9060,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3853:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3796:81:8"
            },
            "src": "3780:98:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9064,
              "nodeType": "StructuredDocumentation",
              "src": "3886:447:8",
              "text": " @dev triggered when a conversion between two tokens occurs\n @param _fromToken       source ERC20 token\n @param _toToken         target ERC20 token\n @param _trader          wallet that initiated the trade\n @param _amount          amount converted, in the source token\n @param _return          amount returned, minus conversion fee\n @param _conversionFee   conversion fee"
            },
            "id": 9078,
            "name": "Conversion",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9066,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_fromToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4366:30:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9065,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "4366:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9068,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_toToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4407:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9067,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "4407:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9070,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4446:23:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4446:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9072,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4480:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9071,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4480:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9074,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_return",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4506:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9073,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4506:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9076,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9078,
                  "src": "4532:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 9075,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4532:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4355:205:8"
            },
            "src": "4339:222:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9079,
              "nodeType": "StructuredDocumentation",
              "src": "4569:562:8",
              "text": " @dev triggered when the rate between two tokens in the converter changes\n note that the event might be dispatched for rate updates between any two tokens in the converter\n note that prior to version 28, you should use the 'PriceDataUpdate' event instead\n @param  _token1 address of the first token\n @param  _token2 address of the second token\n @param  _rateN  rate of 1 unit of `_token1` in `_token2` (numerator)\n @param  _rateD  rate of 1 unit of `_token1` in `_token2` (denominator)"
            },
            "id": 9089,
            "name": "TokenRateUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9088,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9081,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token1",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5169:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9080,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "5169:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9083,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_token2",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5207:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9082,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "5207:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9085,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_rateN",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5245:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9084,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5245:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9087,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_rateD",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9089,
                  "src": "5270:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9086,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5270:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5158:133:8"
            },
            "src": "5137:155:8"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 9090,
              "nodeType": "StructuredDocumentation",
              "src": "5300:220:8",
              "text": " @dev triggered when the conversion fee is updated\n @param  _prevFee    previous fee percentage, represented in ppm\n @param  _newFee     new fee percentage, represented in ppm"
            },
            "id": 9096,
            "name": "ConversionFeeUpdate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9092,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_prevFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9096,
                  "src": "5552:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9091,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5552:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9094,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_newFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9096,
                  "src": "5569:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9093,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5569:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5551:33:8"
            },
            "src": "5526:59:8"
          },
          {
            "body": {
              "id": 9126,
              "nodeType": "Block",
              "src": "6192:82:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9118,
                      "name": "anchor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9030,
                      "src": "6203:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                        "typeString": "contract IConverterAnchor"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9119,
                      "name": "_anchor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9099,
                      "src": "6212:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                        "typeString": "contract IConverterAnchor"
                      }
                    },
                    "src": "6203:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "id": 9121,
                  "nodeType": "ExpressionStatement",
                  "src": "6203:16:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9122,
                      "name": "maxConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9047,
                      "src": "6230:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9123,
                      "name": "_maxConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9103,
                      "src": "6249:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "6230:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9125,
                  "nodeType": "ExpressionStatement",
                  "src": "6230:36:8"
                }
              ]
            },
            "documentation": {
              "id": 9097,
              "nodeType": "StructuredDocumentation",
              "src": "5593:313:8",
              "text": " @dev used by sub-contracts to initialize a new converter\n @param  _anchor             anchor governed by the converter\n @param  _registry           address of a contract registry contract\n @param  _maxConversionFee   maximum conversion fee, represented in ppm"
            },
            "id": 9127,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9108,
                        "name": "_anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9099,
                        "src": "6069:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      ],
                      "id": 9107,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6061:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9106,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6061:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6061:16:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9110,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9105,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "6048:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6048:30:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9112,
                    "name": "_registry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9101,
                    "src": "6111:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  }
                ],
                "id": 9113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9111,
                  "name": "ContractRegistryClient",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21719,
                  "src": "6088:22:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ContractRegistryClient_$21719_$",
                    "typeString": "type(contract ContractRegistryClient)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6088:33:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9115,
                    "name": "_maxConversionFee",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9103,
                    "src": "6168:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 9116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9114,
                  "name": "validConversionFee",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9196,
                  "src": "6149:18:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint32_$",
                    "typeString": "modifier (uint32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6149:37:8"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9099,
                  "mutability": "mutable",
                  "name": "_anchor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "5934:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9098,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "5934:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9101,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "5969:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9100,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22831,
                    "src": "5969:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9103,
                  "mutability": "mutable",
                  "name": "_maxConversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9127,
                  "src": "6007:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9102,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6007:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5923:115:8"
            },
            "returnParameters": {
              "id": 9117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6192:0:8"
            },
            "scope": 10039,
            "src": "5912:362:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9133,
              "nodeType": "Block",
              "src": "6345:40:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9129,
                      "name": "_active",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9144,
                      "src": "6356:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6356:9:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9131,
                  "nodeType": "ExpressionStatement",
                  "src": "6356:9:8"
                },
                {
                  "id": 9132,
                  "nodeType": "PlaceholderStatement",
                  "src": "6376:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9134,
            "name": "active",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9128,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6342:2:8"
            },
            "src": "6327:58:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9143,
              "nodeType": "Block",
              "src": "6473:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9138,
                          "name": "isActive",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9362,
                          "src": "6492:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 9139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6492:10:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e414354495645",
                        "id": 9140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6504:14:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
                          "typeString": "literal_string \"ERR_INACTIVE\""
                        },
                        "value": "ERR_INACTIVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a22dd8039fb80c8642cf17389b806c873aa9fbdbf3f2bd8746d8ce373ef50f9e",
                          "typeString": "literal_string \"ERR_INACTIVE\""
                        }
                      ],
                      "id": 9137,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6484:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6484:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9142,
                  "nodeType": "ExpressionStatement",
                  "src": "6484:35:8"
                }
              ]
            },
            "documentation": null,
            "id": 9144,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_active",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6456:2:8"
            },
            "returnParameters": {
              "id": 9136,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6473:0:8"
            },
            "scope": 10039,
            "src": "6440:87:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9150,
              "nodeType": "Block",
              "src": "6604:42:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9146,
                      "name": "_inactive",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9162,
                      "src": "6615:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$__$",
                        "typeString": "function () view"
                      }
                    },
                    "id": 9147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6615:11:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9148,
                  "nodeType": "ExpressionStatement",
                  "src": "6615:11:8"
                },
                {
                  "id": 9149,
                  "nodeType": "PlaceholderStatement",
                  "src": "6637:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9151,
            "name": "inactive",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9145,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6601:2:8"
            },
            "src": "6584:62:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9161,
              "nodeType": "Block",
              "src": "6736:53:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "6755:11:8",
                        "subExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9155,
                            "name": "isActive",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9362,
                            "src": "6756:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 9156,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6756:10:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f414354495645",
                        "id": 9158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6768:12:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
                          "typeString": "literal_string \"ERR_ACTIVE\""
                        },
                        "value": "ERR_ACTIVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_181d3d32638945611c2cb46b623de141c5e74a32dcd850864f64837aa849ee3f",
                          "typeString": "literal_string \"ERR_ACTIVE\""
                        }
                      ],
                      "id": 9154,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6747:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6747:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9160,
                  "nodeType": "ExpressionStatement",
                  "src": "6747:34:8"
                }
              ]
            },
            "documentation": null,
            "id": 9162,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_inactive",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6719:2:8"
            },
            "returnParameters": {
              "id": 9153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6736:0:8"
            },
            "scope": 10039,
            "src": "6701:88:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9171,
              "nodeType": "Block",
              "src": "6948:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9167,
                        "name": "_address",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9164,
                        "src": "6973:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9166,
                      "name": "_validReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9186,
                      "src": "6959:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token) view"
                      }
                    },
                    "id": 9168,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6959:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9169,
                  "nodeType": "ExpressionStatement",
                  "src": "6959:23:8"
                },
                {
                  "id": 9170,
                  "nodeType": "PlaceholderStatement",
                  "src": "6993:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9172,
            "name": "validReserve",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9165,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9164,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9172,
                  "src": "6926:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9163,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "6926:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6925:22:8"
            },
            "src": "6904:98:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9185,
              "nodeType": "Block",
              "src": "7116:75:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9178,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "7135:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9180,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9179,
                            "name": "_address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9174,
                            "src": "7144:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7135:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9181,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "7135:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7161:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9177,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7127:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7127:56:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9184,
                  "nodeType": "ExpressionStatement",
                  "src": "7127:56:8"
                }
              ]
            },
            "documentation": null,
            "id": 9186,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validReserve",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9175,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9174,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9186,
                  "src": "7080:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9173,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "7080:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7079:22:8"
            },
            "returnParameters": {
              "id": 9176,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7116:0:8"
            },
            "scope": 10039,
            "src": "7057:134:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9195,
              "nodeType": "Block",
              "src": "7283:66:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9191,
                        "name": "_conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9188,
                        "src": "7314:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9190,
                      "name": "_validConversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9209,
                      "src": "7294:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
                        "typeString": "function (uint32) pure"
                      }
                    },
                    "id": 9192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7294:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9193,
                  "nodeType": "ExpressionStatement",
                  "src": "7294:35:8"
                },
                {
                  "id": 9194,
                  "nodeType": "PlaceholderStatement",
                  "src": "7340:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9196,
            "name": "validConversionFee",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9189,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9188,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9196,
                  "src": "7260:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9187,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7260:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7259:23:8"
            },
            "src": "7232:117:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9208,
              "nodeType": "Block",
              "src": "7470:90:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9204,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9202,
                          "name": "_conversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9198,
                          "src": "7489:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9203,
                          "name": "PPM_RESOLUTION",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9007,
                          "src": "7507:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "7489:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
                        "id": 9205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7523:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        },
                        "value": "ERR_INVALID_CONVERSION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        }
                      ],
                      "id": 9201,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7481:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7481:71:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9207,
                  "nodeType": "ExpressionStatement",
                  "src": "7481:71:8"
                }
              ]
            },
            "documentation": null,
            "id": 9209,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validConversionFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9199,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9198,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9209,
                  "src": "7433:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9197,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7433:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7432:23:8"
            },
            "returnParameters": {
              "id": 9200,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7470:0:8"
            },
            "scope": 10039,
            "src": "7404:156:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9218,
              "nodeType": "Block",
              "src": "7645:59:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9214,
                        "name": "_weight",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9211,
                        "src": "7676:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9213,
                      "name": "_validReserveWeight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9236,
                      "src": "7656:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$__$",
                        "typeString": "function (uint32) pure"
                      }
                    },
                    "id": 9215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7656:28:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9216,
                  "nodeType": "ExpressionStatement",
                  "src": "7656:28:8"
                },
                {
                  "id": 9217,
                  "nodeType": "PlaceholderStatement",
                  "src": "7695:1:8"
                }
              ]
            },
            "documentation": null,
            "id": 9219,
            "name": "validReserveWeight",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 9212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9211,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9219,
                  "src": "7629:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9210,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7629:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7628:16:8"
            },
            "src": "7601:103:8",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9235,
              "nodeType": "Block",
              "src": "7818:98:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9231,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9227,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9225,
                            "name": "_weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9221,
                            "src": "7837:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 9226,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7847:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "7837:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9230,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9228,
                            "name": "_weight",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9221,
                            "src": "7852:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9229,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "7863:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "7852:25:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7837:40:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
                        "id": 9232,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7879:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        },
                        "value": "ERR_INVALID_RESERVE_WEIGHT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        }
                      ],
                      "id": 9224,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7829:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7829:79:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9234,
                  "nodeType": "ExpressionStatement",
                  "src": "7829:79:8"
                }
              ]
            },
            "documentation": null,
            "id": 9236,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validReserveWeight",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9222,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9221,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9236,
                  "src": "7788:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9220,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7788:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7787:16:8"
            },
            "returnParameters": {
              "id": 9223,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7818:0:8"
            },
            "scope": 10039,
            "src": "7759:157:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              13190
            ],
            "body": null,
            "documentation": null,
            "functionSelector": "3e8ff43f",
            "id": 9242,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "converterType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9238,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8009:8:8"
            },
            "parameters": {
              "id": 9237,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7986:2:8"
            },
            "returnParameters": {
              "id": 9241,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9240,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9242,
                  "src": "8027:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9239,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "8027:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8026:8:8"
            },
            "scope": 10039,
            "src": "7964:71:8",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13213
            ],
            "body": null,
            "documentation": null,
            "functionSelector": "af94b8d8",
            "id": 9256,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "targetAmountAndFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9250,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8236:8:8"
            },
            "parameters": {
              "id": 9249,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9244,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8111:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9243,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "8111:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9246,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8137:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9245,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "8137:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9248,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8163:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9247,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8163:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8110:69:8"
            },
            "returnParameters": {
              "id": 9255,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9252,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8263:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9251,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8263:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9254,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9256,
                  "src": "8272:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9253,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8272:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8262:18:8"
            },
            "scope": 10039,
            "src": "8083:198:8",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13253
            ],
            "body": {
              "id": 9269,
              "nodeType": "Block",
              "src": "8435:281:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9262,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "8454:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9264,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9263,
                            "name": "ETH_RESERVE_ADDRESS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9012,
                            "src": "8463:19:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8454:29:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9265,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "8454:35:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9266,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8491:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9261,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8446:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8446:67:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9268,
                  "nodeType": "ExpressionStatement",
                  "src": "8446:67:8"
                }
              ]
            },
            "documentation": {
              "id": 9257,
              "nodeType": "StructuredDocumentation",
              "src": "8289:104:8",
              "text": " @dev deposits ether\n can only be called if the converter has an ETH reserve"
            },
            "id": 9270,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9259,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8418:8:8"
            },
            "parameters": {
              "id": 9258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8406:2:8"
            },
            "returnParameters": {
              "id": 9260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8435:0:8"
            },
            "scope": 10039,
            "src": "8399:317:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              13285
            ],
            "body": {
              "id": 9315,
              "nodeType": "Block",
              "src": "9248:392:8",
              "statements": [
                {
                  "assignments": [
                    9285
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9285,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9315,
                      "src": "9259:25:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9284,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9259:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9289,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9287,
                        "name": "CONVERTER_UPGRADER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21542,
                        "src": "9297:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 9286,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21718,
                      "src": "9287:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 9288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9287:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9259:57:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9430:11:8",
                          "subExpression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9291,
                              "name": "isActive",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9362,
                              "src": "9431:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 9292,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9431:10:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9294,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "9445:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9295,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9285,
                            "src": "9454:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9445:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9430:41:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 9298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9473:19:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 9290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9422:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9422:71:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9300,
                  "nodeType": "ExpressionStatement",
                  "src": "9422:71:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9306,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "9525:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            ],
                            "id": 9305,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9517:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 9304,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9517:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9517:13:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 9308,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9517:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9301,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9273,
                        "src": "9504:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 9303,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9504:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 9309,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9504:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9310,
                  "nodeType": "ExpressionStatement",
                  "src": "9504:35:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9312,
                        "name": "ETH_RESERVE_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9012,
                        "src": "9612:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9311,
                      "name": "syncReserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9844,
                      "src": "9593:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 9313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9593:39:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9314,
                  "nodeType": "ExpressionStatement",
                  "src": "9593:39:8"
                }
              ]
            },
            "documentation": {
              "id": 9271,
              "nodeType": "StructuredDocumentation",
              "src": "8724:356:8",
              "text": " @dev withdraws ether\n can only be called by the owner if the converter is inactive or by upgrader contract\n can only be called after the upgrader contract has accepted the ownership of this contract\n can only be called if the converter has an ETH reserve\n @param _to  address to send the ETH to"
            },
            "functionSelector": "690d8320",
            "id": 9316,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9276,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "9171:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9171:9:8"
              },
              {
                "arguments": null,
                "id": 9279,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9278,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "9190:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9190:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9281,
                    "name": "ETH_RESERVE_ADDRESS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9012,
                    "src": "9222:19:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9282,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9280,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "9209:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9209:33:8"
              }
            ],
            "name": "withdrawETH",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9275,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9153:8:8"
            },
            "parameters": {
              "id": 9274,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9273,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9316,
                  "src": "9107:19:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9107:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9106:21:8"
            },
            "returnParameters": {
              "id": 9283,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9248:0:8"
            },
            "scope": 10039,
            "src": "9086:554:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9324,
              "nodeType": "Block",
              "src": "9867:30:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 9322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9885:4:8",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 9321,
                  "id": 9323,
                  "nodeType": "Return",
                  "src": "9878:11:8"
                }
              ]
            },
            "documentation": {
              "id": 9317,
              "nodeType": "StructuredDocumentation",
              "src": "9648:161:8",
              "text": " @dev checks whether or not the converter version is 28 or higher\n @return true, since the converter version is 28 or higher"
            },
            "functionSelector": "d260529c",
            "id": 9325,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isV28OrHigher",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9837:2:8"
            },
            "returnParameters": {
              "id": 9321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9320,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9325,
                  "src": "9861:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9319,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9861:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9860:6:8"
            },
            "scope": 10039,
            "src": "9815:82:8",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13271
            ],
            "body": {
              "id": 9344,
              "nodeType": "Block",
              "src": "10419:51:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9342,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9340,
                      "name": "conversionWhitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9033,
                      "src": "10430:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$22917",
                        "typeString": "contract IWhitelist"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9341,
                      "name": "_whitelist",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9328,
                      "src": "10452:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWhitelist_$22917",
                        "typeString": "contract IWhitelist"
                      }
                    },
                    "src": "10430:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "id": 9343,
                  "nodeType": "ExpressionStatement",
                  "src": "10430:32:8"
                }
              ]
            },
            "documentation": {
              "id": 9326,
              "nodeType": "StructuredDocumentation",
              "src": "9905:357:8",
              "text": " @dev allows the owner to update & enable the conversion whitelist contract address\n when set, only addresses that are whitelisted are actually allowed to use the converter\n note that the whitelist check is actually done by the BancorNetwork contract\n @param _whitelist    address of a whitelist contract"
            },
            "functionSelector": "4af80f0e",
            "id": 9345,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9332,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9331,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "10366:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10366:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9336,
                        "name": "_whitelist",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9328,
                        "src": "10401:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWhitelist_$22917",
                          "typeString": "contract IWhitelist"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IWhitelist_$22917",
                          "typeString": "contract IWhitelist"
                        }
                      ],
                      "id": 9335,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "10393:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9334,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10393:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10393:19:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9338,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9333,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22644,
                  "src": "10385:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10385:28:8"
              }
            ],
            "name": "setConversionWhitelist",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9330,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10348:8:8"
            },
            "parameters": {
              "id": 9329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9328,
                  "mutability": "mutable",
                  "name": "_whitelist",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9345,
                  "src": "10300:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IWhitelist_$22917",
                    "typeString": "contract IWhitelist"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9327,
                    "name": "IWhitelist",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22917,
                    "src": "10300:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                      "typeString": "contract IWhitelist"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10299:23:8"
            },
            "returnParameters": {
              "id": 9339,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10419:0:8"
            },
            "scope": 10039,
            "src": "10268:202:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13200
            ],
            "body": {
              "id": 9361,
              "nodeType": "Block",
              "src": "10705:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 9359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 9352,
                          "name": "anchor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9030,
                          "src": "10723:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                            "typeString": "contract IConverterAnchor"
                          }
                        },
                        "id": 9353,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "owner",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22838,
                        "src": "10723:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 9354,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10723:14:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9357,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "10749:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ConverterBase_$10039",
                            "typeString": "contract ConverterBase"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ConverterBase_$10039",
                            "typeString": "contract ConverterBase"
                          }
                        ],
                        "id": 9356,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10741:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 9355,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10741:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 9358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10741:13:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "10723:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9351,
                  "id": 9360,
                  "nodeType": "Return",
                  "src": "10716:38:8"
                }
              ]
            },
            "documentation": {
              "id": 9346,
              "nodeType": "StructuredDocumentation",
              "src": "10478:157:8",
              "text": " @dev returns true if the converter is active, false otherwise\n @return true if the converter is active, false otherwise"
            },
            "functionSelector": "22f3e2d4",
            "id": 9362,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isActive",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9348,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10681:8:8"
            },
            "parameters": {
              "id": 9347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10658:2:8"
            },
            "returnParameters": {
              "id": 9351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9350,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9362,
                  "src": "10699:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9349,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10699:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10698:6:8"
            },
            "scope": 10039,
            "src": "10641:121:8",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13258
            ],
            "body": {
              "id": 9380,
              "nodeType": "Block",
              "src": "11256:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9377,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9365,
                        "src": "11292:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9374,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "11267:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22843,
                      "src": "11267:24:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11267:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9379,
                  "nodeType": "ExpressionStatement",
                  "src": "11267:35:8"
                }
              ]
            },
            "documentation": {
              "id": 9363,
              "nodeType": "StructuredDocumentation",
              "src": "10770:336:8",
              "text": " @dev transfers the anchor ownership\n the new owner needs to accept the transfer\n can only be called by the converter upgrder while the upgrader is the owner\n note that prior to version 28, you should use 'transferAnchorOwnership' instead\n @param _newOwner    new token owner"
            },
            "functionSelector": "67b6d57c",
            "id": 9381,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9369,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9368,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "11207:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11207:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9371,
                    "name": "CONVERTER_UPGRADER",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21542,
                    "src": "11231:18:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9370,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21577,
                  "src": "11226:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11226:24:8"
              }
            ],
            "name": "transferAnchorOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9367,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11189:8:8"
            },
            "parameters": {
              "id": 9366,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9365,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9381,
                  "src": "11145:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11145:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11144:19:8"
            },
            "returnParameters": {
              "id": 9373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11256:0:8"
            },
            "scope": 10039,
            "src": "11112:198:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13261
            ],
            "body": {
              "id": 9404,
              "nodeType": "Block",
              "src": "11700:209:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 9392,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9389,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "11781:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 9390,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11781:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 9391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11803:1:8",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11781:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 9393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11806:27:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 9388,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "11773:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9394,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11773:61:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9395,
                  "nodeType": "ExpressionStatement",
                  "src": "11773:61:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9396,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "11845:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9398,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "acceptOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22846,
                      "src": "11845:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9399,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11845:24:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9400,
                  "nodeType": "ExpressionStatement",
                  "src": "11845:24:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9401,
                      "name": "syncReserveBalances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9871,
                      "src": "11880:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11880:21:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9403,
                  "nodeType": "ExpressionStatement",
                  "src": "11880:21:8"
                }
              ]
            },
            "documentation": {
              "id": 9382,
              "nodeType": "StructuredDocumentation",
              "src": "11318:309:8",
              "text": " @dev accepts ownership of the anchor after an ownership transfer\n most converters are also activated as soon as they accept the anchor ownership\n can only be called by the contract owner\n note that prior to version 28, you should use 'acceptTokenOwnership' instead"
            },
            "functionSelector": "cdc91c69",
            "id": 9405,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9386,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9385,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "11690:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11690:9:8"
              }
            ],
            "name": "acceptAnchorOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9384,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11681:8:8"
            },
            "parameters": {
              "id": 9383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11663:2:8"
            },
            "returnParameters": {
              "id": 9387,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11700:0:8"
            },
            "scope": 10039,
            "src": "11633:276:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9425,
              "nodeType": "Block",
              "src": "12315:62:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9420,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9408,
                        "src": "12348:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9421,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9410,
                        "src": "12356:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9422,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9412,
                        "src": "12361:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9417,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "12326:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      "id": 9419,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22906,
                      "src": "12326:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,address,uint256) external"
                      }
                    },
                    "id": 9423,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12326:43:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9424,
                  "nodeType": "ExpressionStatement",
                  "src": "12326:43:8"
                }
              ]
            },
            "documentation": {
              "id": 9406,
              "nodeType": "StructuredDocumentation",
              "src": "11917:297:8",
              "text": " @dev withdraws tokens held by the anchor and sends them to an account\n can only be called by the owner\n @param _token   ERC20 token contract address\n @param _to      account to receive the new amount\n @param _amount  amount to withdraw"
            },
            "functionSelector": "395900d4",
            "id": 9426,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9414,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "12305:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12305:9:8"
              }
            ],
            "name": "withdrawFromAnchor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9408,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12248:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9407,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "12248:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9410,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12268:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12268:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9412,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9426,
                  "src": "12281:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9411,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12281:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12247:50:8"
            },
            "returnParameters": {
              "id": 9416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12315:0:8"
            },
            "scope": 10039,
            "src": "12220:157:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13266
            ],
            "body": {
              "id": 9451,
              "nodeType": "Block",
              "src": "12655:199:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9438,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9436,
                          "name": "_conversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9429,
                          "src": "12674:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9437,
                          "name": "maxConversionFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9047,
                          "src": "12692:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "12674:34:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f434f4e56455253494f4e5f464545",
                        "id": 9439,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12710:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        },
                        "value": "ERR_INVALID_CONVERSION_FEE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ae729833ea0b2cfd1b35fa1d075ae330e76860b5ab276fa04bde88b85e5c4d00",
                          "typeString": "literal_string \"ERR_INVALID_CONVERSION_FEE\""
                        }
                      ],
                      "id": 9435,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12666:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12666:73:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9441,
                  "nodeType": "ExpressionStatement",
                  "src": "12666:73:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9443,
                        "name": "conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9051,
                        "src": "12775:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9444,
                        "name": "_conversionFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9429,
                        "src": "12790:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 9442,
                      "name": "ConversionFeeUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9096,
                      "src": "12755:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_uint32_$returns$__$",
                        "typeString": "function (uint32,uint32)"
                      }
                    },
                    "id": 9445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12755:50:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9446,
                  "nodeType": "EmitStatement",
                  "src": "12750:55:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9447,
                      "name": "conversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9051,
                      "src": "12816:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9448,
                      "name": "_conversionFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9429,
                      "src": "12832:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "12816:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9450,
                  "nodeType": "ExpressionStatement",
                  "src": "12816:30:8"
                }
              ]
            },
            "documentation": {
              "id": 9427,
              "nodeType": "StructuredDocumentation",
              "src": "12385:189:8",
              "text": " @dev updates the current conversion fee\n can only be called by the contract owner\n @param _conversionFee new conversion fee, represented in ppm"
            },
            "functionSelector": "ecbca55d",
            "id": 9452,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9433,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9432,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "12645:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12645:9:8"
              }
            ],
            "name": "setConversionFee",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9431,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12636:8:8"
            },
            "parameters": {
              "id": 9430,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9429,
                  "mutability": "mutable",
                  "name": "_conversionFee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9452,
                  "src": "12606:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9428,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12606:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12605:23:8"
            },
            "returnParameters": {
              "id": 9434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12655:0:8"
            },
            "scope": 10039,
            "src": "12580:274:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13280,
              22574
            ],
            "body": {
              "id": 9509,
              "nodeType": "Block",
              "src": "13506:559:8",
              "statements": [
                {
                  "assignments": [
                    9470
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9470,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9509,
                      "src": "13517:25:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 9469,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13517:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9474,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9472,
                        "name": "CONVERTER_UPGRADER",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21542,
                        "src": "13555:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 9471,
                      "name": "addressOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21718,
                      "src": "13545:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 9473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13545:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13517:57:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9488,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 9484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9480,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "13764:23:8",
                            "subExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "id": 9476,
                                  "name": "reserves",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9040,
                                  "src": "13765:8:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                                    "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                  }
                                },
                                "id": 9478,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 9477,
                                  "name": "_token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9455,
                                  "src": "13774:6:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                    "typeString": "contract IERC20Token"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "13765:16:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                  "typeString": "struct ConverterBase.Reserve storage ref"
                                }
                              },
                              "id": 9479,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "isSet",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9022,
                              "src": "13765:22:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "13791:11:8",
                            "subExpression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9481,
                                "name": "isActive",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9362,
                                "src": "13792:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                  "typeString": "function () view returns (bool)"
                                }
                              },
                              "id": 9482,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13792:10:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "13764:38:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9485,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "13806:5:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9486,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9470,
                            "src": "13815:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13806:26:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "13764:68:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 9489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13834:19:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 9475,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13756:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13756:98:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9491,
                  "nodeType": "ExpressionStatement",
                  "src": "13756:98:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9495,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9455,
                        "src": "13886:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9496,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9457,
                        "src": "13894:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9497,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9459,
                        "src": "13899:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9492,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "13865:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_ConverterBase_$10039",
                          "typeString": "contract super ConverterBase"
                        }
                      },
                      "id": 9494,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22574,
                      "src": "13865:20:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20Token,address,uint256)"
                      }
                    },
                    "id": 9498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13865:42:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9499,
                  "nodeType": "ExpressionStatement",
                  "src": "13865:42:8"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9500,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "13994:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9502,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9501,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9455,
                        "src": "14003:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "13994:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9503,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9022,
                    "src": "13994:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 9508,
                  "nodeType": "IfStatement",
                  "src": "13990:67:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 9505,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9455,
                          "src": "14050:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        ],
                        "id": 9504,
                        "name": "syncReserveBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9844,
                        "src": "14031:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                          "typeString": "function (contract IERC20Token)"
                        }
                      },
                      "id": 9506,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14031:26:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9507,
                    "nodeType": "ExpressionStatement",
                    "src": "14031:26:8"
                  }
                }
              ]
            },
            "documentation": {
              "id": 9453,
              "nodeType": "StructuredDocumentation",
              "src": "12862:462:8",
              "text": " @dev withdraws tokens held by the converter and sends them to an account\n can only be called by the owner\n note that reserve tokens can only be withdrawn by the owner while the converter is inactive\n unless the owner is the converter upgrader contract\n @param _token   ERC20 token contract address\n @param _to      account to receive the new amount\n @param _amount  amount to withdraw"
            },
            "functionSelector": "5e35359e",
            "id": 9510,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9465,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9464,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "13472:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13472:9:8"
              },
              {
                "arguments": null,
                "id": 9467,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9466,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "13491:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13491:9:8"
              }
            ],
            "name": "withdrawTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9463,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "contractScope": null,
                  "id": 9461,
                  "name": "IConverter",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 13340,
                  "src": "13438:10:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverter_$13340",
                    "typeString": "contract IConverter"
                  }
                },
                {
                  "contractScope": null,
                  "id": 9462,
                  "name": "TokenHolder",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22575,
                  "src": "13450:11:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_TokenHolder_$22575",
                    "typeString": "contract TokenHolder"
                  }
                }
              ],
              "src": "13429:33:8"
            },
            "parameters": {
              "id": 9460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9455,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13354:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9454,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "13354:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9457,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13374:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13374:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9459,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9510,
                  "src": "13387:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9458,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13387:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13353:50:8"
            },
            "returnParameters": {
              "id": 9468,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13506:0:8"
            },
            "scope": 10039,
            "src": "13330:735:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9547,
              "nodeType": "Block",
              "src": "14324:338:8",
              "statements": [
                {
                  "assignments": [
                    9517
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9517,
                      "mutability": "mutable",
                      "name": "converterUpgrader",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9547,
                      "src": "14335:36:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                        "typeString": "contract IConverterUpgrader"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9516,
                        "name": "IConverterUpgrader",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13660,
                        "src": "14335:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                          "typeString": "contract IConverterUpgrader"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9523,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9520,
                            "name": "CONVERTER_UPGRADER",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21542,
                            "src": "14403:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 9519,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21718,
                          "src": "14393:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 9521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14393:29:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9518,
                      "name": "IConverterUpgrader",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13660,
                      "src": "14374:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IConverterUpgrader_$13660_$",
                        "typeString": "type(contract IConverterUpgrader)"
                      }
                    },
                    "id": 9522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14374:49:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                      "typeString": "contract IConverterUpgrader"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14335:88:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9525,
                          "name": "converterType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9242,
                          "src": "14492:13:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint16_$",
                            "typeString": "function () pure returns (uint16)"
                          }
                        },
                        "id": 9526,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14492:15:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9527,
                        "name": "anchor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9030,
                        "src": "14509:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14517:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        {
                          "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                          "typeString": "contract IConverterAnchor"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 9524,
                      "name": "Activation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9063,
                      "src": "14481:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint16_$_t_contract$_IConverterAnchor_$13349_$_t_bool_$returns$__$",
                        "typeString": "function (uint16,contract IConverterAnchor,bool)"
                      }
                    },
                    "id": 9529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14481:42:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9530,
                  "nodeType": "EmitStatement",
                  "src": "14476:47:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9534,
                            "name": "converterUpgrader",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9517,
                            "src": "14562:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                              "typeString": "contract IConverterUpgrader"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                              "typeString": "contract IConverterUpgrader"
                            }
                          ],
                          "id": 9533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14554:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 9532,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14554:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 9535,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14554:26:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9531,
                      "name": "transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21787,
                      "src": "14536:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14536:45:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9537,
                  "nodeType": "ExpressionStatement",
                  "src": "14536:45:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9541,
                        "name": "version",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9027,
                        "src": "14618:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9538,
                        "name": "converterUpgrader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9517,
                        "src": "14592:17:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IConverterUpgrader_$13660",
                          "typeString": "contract IConverterUpgrader"
                        }
                      },
                      "id": 9540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "upgrade",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13659,
                      "src": "14592:25:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint16_$returns$__$",
                        "typeString": "function (uint16) external"
                      }
                    },
                    "id": 9542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14592:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9543,
                  "nodeType": "ExpressionStatement",
                  "src": "14592:34:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9544,
                      "name": "acceptOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21817,
                      "src": "14637:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14637:17:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9546,
                  "nodeType": "ExpressionStatement",
                  "src": "14637:17:8"
                }
              ]
            },
            "documentation": {
              "id": 9511,
              "nodeType": "StructuredDocumentation",
              "src": "14073:209:8",
              "text": " @dev upgrades the converter to the latest version\n can only be called by the owner\n note that the owner needs to call acceptOwnership on the new converter after the upgrade"
            },
            "functionSelector": "d55ec697",
            "id": 9548,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9514,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9513,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "14314:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14314:9:8"
              }
            ],
            "name": "upgrade",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9512,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14304:2:8"
            },
            "returnParameters": {
              "id": 9515,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14324:0:8"
            },
            "scope": 10039,
            "src": "14288:374:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9560,
              "nodeType": "Block",
              "src": "14940:54:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9556,
                          "name": "reserveTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9036,
                          "src": "14965:13:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                            "typeString": "contract IERC20Token[] storage ref"
                          }
                        },
                        "id": 9557,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "14965:20:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "14958:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint16_$",
                        "typeString": "type(uint16)"
                      },
                      "typeName": {
                        "id": 9554,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "14958:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9558,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14958:28:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 9553,
                  "id": 9559,
                  "nodeType": "Return",
                  "src": "14951:35:8"
                }
              ]
            },
            "documentation": {
              "id": 9549,
              "nodeType": "StructuredDocumentation",
              "src": "14670:206:8",
              "text": " @dev returns the number of reserve tokens defined\n note that prior to version 17, you should use 'connectorTokenCount' instead\n @return number of reserve tokens"
            },
            "functionSelector": "9b99a8e2",
            "id": 9561,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reserveTokenCount",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9550,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14908:2:8"
            },
            "returnParameters": {
              "id": 9553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9552,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9561,
                  "src": "14932:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9551,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "14932:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14931:8:8"
            },
            "scope": 10039,
            "src": "14882:112:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13292
            ],
            "body": {
              "id": 9663,
              "nodeType": "Block",
              "src": "15545:544:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9592,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9564,
                                "src": "15599:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              ],
                              "id": 9591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15591:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9590,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15591:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9593,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15591:15:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9596,
                                "name": "anchor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9030,
                                "src": "15618:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                                  "typeString": "contract IConverterAnchor"
                                }
                              ],
                              "id": 9595,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "15610:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9594,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "15610:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9597,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15610:15:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "15591:34:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "15629:23:8",
                          "subExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 9599,
                                "name": "reserves",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9040,
                                "src": "15630:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                                  "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                                }
                              },
                              "id": 9601,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 9600,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9564,
                                "src": "15639:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC20Token_$21127",
                                  "typeString": "contract IERC20Token"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15630:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                                "typeString": "struct ConverterBase.Reserve storage ref"
                              }
                            },
                            "id": 9602,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9022,
                            "src": "15630:22:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "15591:61:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f52455345525645",
                        "id": 9605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15654:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        },
                        "value": "ERR_INVALID_RESERVE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2f153897d46b1410527faf37dfe95496d4a79980282840ba17da0adc4406792c",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE\""
                        }
                      ],
                      "id": 9589,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15583:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15583:93:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9607,
                  "nodeType": "ExpressionStatement",
                  "src": "15583:93:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "id": 9613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9609,
                          "name": "_weight",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9566,
                          "src": "15695:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          "id": 9612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 9610,
                            "name": "PPM_RESOLUTION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9007,
                            "src": "15706:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 9611,
                            "name": "reserveRatio",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9043,
                            "src": "15723:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "15706:29:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "src": "15695:40:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f574549474854",
                        "id": 9614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15737:28:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        },
                        "value": "ERR_INVALID_RESERVE_WEIGHT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e4e4c57eb13b428a7fc031dc1f6f2c3e13b61f7d7b93994b2d17f8dc75658178",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_WEIGHT\""
                        }
                      ],
                      "id": 9608,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15687:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15687:79:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9616,
                  "nodeType": "ExpressionStatement",
                  "src": "15687:79:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "id": 9625,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9618,
                            "name": "reserveTokenCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "15785:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                              "typeString": "function () view returns (uint16)"
                            }
                          },
                          "id": 9619,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15785:19:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "-",
                              "prefix": true,
                              "src": "15814:2:8",
                              "subExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 9622,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15815:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_minus_1_by_1",
                                "typeString": "int_const -1"
                              }
                            ],
                            "id": 9621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15807:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint16_$",
                              "typeString": "type(uint16)"
                            },
                            "typeName": {
                              "id": 9620,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "15807:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15807:10:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "src": "15785:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f524553455256455f434f554e54",
                        "id": 9626,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15819:27:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        },
                        "value": "ERR_INVALID_RESERVE_COUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ed94f14d8dcbb423a259b4072978fc0c494c6af1fea066a19023afb1a76ac87f",
                          "typeString": "literal_string \"ERR_INVALID_RESERVE_COUNT\""
                        }
                      ],
                      "id": 9617,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15777:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15777:70:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9628,
                  "nodeType": "ExpressionStatement",
                  "src": "15777:70:8"
                },
                {
                  "assignments": [
                    9630
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9630,
                      "mutability": "mutable",
                      "name": "newReserve",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9663,
                      "src": "15860:26:8",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                        "typeString": "struct ConverterBase.Reserve"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9629,
                        "name": "Reserve",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9023,
                        "src": "15860:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9634,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9631,
                      "name": "reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9040,
                      "src": "15889:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                        "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                      }
                    },
                    "id": 9633,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9632,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9564,
                      "src": "15898:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "15889:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                      "typeString": "struct ConverterBase.Reserve storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15860:45:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9635,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15916:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9637,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "balance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9014,
                      "src": "15916:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15937:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "15916:22:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9640,
                  "nodeType": "ExpressionStatement",
                  "src": "15916:22:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9645,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9641,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15949:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "weight",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9016,
                      "src": "15949:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9644,
                      "name": "_weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9566,
                      "src": "15969:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "15949:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9646,
                  "nodeType": "ExpressionStatement",
                  "src": "15949:27:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9647,
                        "name": "newReserve",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9630,
                        "src": "15987:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve storage pointer"
                        }
                      },
                      "id": 9649,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9022,
                      "src": "15987:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 9650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16006:4:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15987:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9652,
                  "nodeType": "ExpressionStatement",
                  "src": "15987:23:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9656,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "16040:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9653,
                        "name": "reserveTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9036,
                        "src": "16021:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                          "typeString": "contract IERC20Token[] storage ref"
                        }
                      },
                      "id": 9655,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16021:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                        "typeString": "function (contract IERC20Token)"
                      }
                    },
                    "id": 9657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16021:26:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9658,
                  "nodeType": "ExpressionStatement",
                  "src": "16021:26:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 9659,
                      "name": "reserveRatio",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9043,
                      "src": "16058:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 9660,
                      "name": "_weight",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9566,
                      "src": "16074:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "16058:23:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 9662,
                  "nodeType": "ExpressionStatement",
                  "src": "16058:23:8"
                }
              ]
            },
            "documentation": {
              "id": 9562,
              "nodeType": "StructuredDocumentation",
              "src": "15002:278:8",
              "text": " @dev defines a new reserve token for the converter\n can only be called by the owner while the converter is inactive\n @param _token   address of the reserve token\n @param _weight  reserve weight, represented in ppm, 1-1000000"
            },
            "functionSelector": "6a49d2c4",
            "id": 9664,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9570,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9569,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "15402:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15402:9:8"
              },
              {
                "arguments": null,
                "id": 9572,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9571,
                  "name": "inactive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9151,
                  "src": "15421:8:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15421:8:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9576,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "15460:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15452:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9574,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15452:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9577,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15452:15:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9578,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9573,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "15439:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15439:29:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9582,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9564,
                        "src": "15494:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 9581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "15486:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 9580,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15486:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 9583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15486:15:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 9584,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9579,
                  "name": "notThis",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22644,
                  "src": "15478:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15478:24:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9586,
                    "name": "_weight",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9566,
                    "src": "15531:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 9587,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9585,
                  "name": "validReserveWeight",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9219,
                  "src": "15512:18:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint32_$",
                    "typeString": "modifier (uint32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15512:27:8"
              }
            ],
            "name": "addReserve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9568,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15384:8:8"
            },
            "parameters": {
              "id": 9567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9564,
                  "mutability": "mutable",
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9664,
                  "src": "15306:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9563,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "15306:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9566,
                  "mutability": "mutable",
                  "name": "_weight",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9664,
                  "src": "15326:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9565,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "15326:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15305:36:8"
            },
            "returnParameters": {
              "id": 9588,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15545:0:8"
            },
            "scope": 10039,
            "src": "15286:803:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9680,
              "nodeType": "Block",
              "src": "16448:56:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9675,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16466:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9677,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9676,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9667,
                        "src": "16475:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16466:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9678,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "weight",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9016,
                    "src": "16466:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "functionReturnParameters": 9674,
                  "id": 9679,
                  "nodeType": "Return",
                  "src": "16459:37:8"
                }
              ]
            },
            "documentation": {
              "id": 9665,
              "nodeType": "StructuredDocumentation",
              "src": "16097:197:8",
              "text": " @dev returns the reserve's weight\n added in version 28\n @param _reserveToken    reserve token contract address\n @return reserve weight"
            },
            "functionSelector": "1cfab290",
            "id": 9681,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9670,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9667,
                    "src": "16402:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9671,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9669,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "16389:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16389:27:8"
              }
            ],
            "name": "reserveWeight",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9667,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9681,
                  "src": "16323:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9666,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "16323:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16322:27:8"
            },
            "returnParameters": {
              "id": 9674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9673,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9681,
                  "src": "16435:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9672,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "16435:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16434:8:8"
            },
            "scope": 10039,
            "src": "16300:204:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13250
            ],
            "body": {
              "id": 9698,
              "nodeType": "Block",
              "src": "16941:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9693,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "16959:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9695,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9694,
                        "name": "_reserveToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9684,
                        "src": "16968:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "16959:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9696,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "balance",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9014,
                    "src": "16959:31:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9692,
                  "id": 9697,
                  "nodeType": "Return",
                  "src": "16952:38:8"
                }
              ]
            },
            "documentation": {
              "id": 9682,
              "nodeType": "StructuredDocumentation",
              "src": "16512:255:8",
              "text": " @dev returns the reserve's balance\n note that prior to version 17, you should use 'getConnectorBalance' instead\n @param _reserveToken    reserve token contract address\n @return reserve balance"
            },
            "functionSelector": "dc8de379",
            "id": 9699,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9688,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9684,
                    "src": "16894:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9689,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9687,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "16881:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "16881:27:8"
              }
            ],
            "name": "reserveBalance",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9686,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16849:8:8"
            },
            "parameters": {
              "id": 9685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9684,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9699,
                  "src": "16797:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9683,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "16797:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16796:27:8"
            },
            "returnParameters": {
              "id": 9692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9691,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9699,
                  "src": "16927:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16927:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16926:9:8"
            },
            "scope": 10039,
            "src": "16773:225:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9710,
              "nodeType": "Block",
              "src": "17228:61:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9705,
                        "name": "reserves",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9040,
                        "src": "17246:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                          "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                        }
                      },
                      "id": 9707,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9706,
                        "name": "ETH_RESERVE_ADDRESS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9012,
                        "src": "17255:19:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "17246:29:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                        "typeString": "struct ConverterBase.Reserve storage ref"
                      }
                    },
                    "id": 9708,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isSet",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 9022,
                    "src": "17246:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9704,
                  "id": 9709,
                  "nodeType": "Return",
                  "src": "17239:42:8"
                }
              ]
            },
            "documentation": {
              "id": 9700,
              "nodeType": "StructuredDocumentation",
              "src": "17006:164:8",
              "text": " @dev checks whether or not the converter has an ETH reserve\n @return true if the converter has an ETH reserve, false otherwise"
            },
            "functionSelector": "12c2aca4",
            "id": 9711,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasETHReserve",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9701,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17198:2:8"
            },
            "returnParameters": {
              "id": 9704,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9703,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9711,
                  "src": "17222:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9702,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17222:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17221:6:8"
            },
            "scope": 10039,
            "src": "17176:113:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13228
            ],
            "body": {
              "id": 9772,
              "nodeType": "Block",
              "src": "18137:517:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        "id": 9736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9734,
                          "name": "_sourceToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9714,
                          "src": "18183:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 9735,
                          "name": "_targetToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9716,
                          "src": "18199:12:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        },
                        "src": "18183:28:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f53414d455f534f555243455f544152474554",
                        "id": 9737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18213:24:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        },
                        "value": "ERR_SAME_SOURCE_TARGET"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_238302f57e4481fe6a4c903e930919efa155f2aabe0b5da37da1448cea5fd634",
                          "typeString": "literal_string \"ERR_SAME_SOURCE_TARGET\""
                        }
                      ],
                      "id": 9733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18175:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9738,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18175:63:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9739,
                  "nodeType": "ExpressionStatement",
                  "src": "18175:63:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9749,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9743,
                                "name": "conversionWhitelist",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9033,
                                "src": "18366:19:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                  "typeString": "contract IWhitelist"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                  "typeString": "contract IWhitelist"
                                }
                              ],
                              "id": 9742,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18358:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9741,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18358:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18358:28:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 9747,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "18398:1:8",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 9746,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18390:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9745,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "18390:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9748,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18390:10:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "18358:42:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 9758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9752,
                                    "name": "_trader",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9720,
                                    "src": "18456:7:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9750,
                                    "name": "conversionWhitelist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9033,
                                    "src": "18422:19:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                      "typeString": "contract IWhitelist"
                                    }
                                  },
                                  "id": 9751,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isWhitelisted",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22916,
                                  "src": "18422:33:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) view external returns (bool)"
                                  }
                                },
                                "id": 9753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18422:42:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9756,
                                    "name": "_beneficiary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9722,
                                    "src": "18502:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 9754,
                                    "name": "conversionWhitelist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9033,
                                    "src": "18468:19:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IWhitelist_$22917",
                                      "typeString": "contract IWhitelist"
                                    }
                                  },
                                  "id": 9755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "isWhitelisted",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22916,
                                  "src": "18468:33:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address) view external returns (bool)"
                                  }
                                },
                                "id": 9757,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18468:47:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "18422:93:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 9759,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "18421:95:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "18358:158:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4e4f545f57484954454c4953544544",
                        "id": 9761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18535:21:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
                          "typeString": "literal_string \"ERR_NOT_WHITELISTED\""
                        },
                        "value": "ERR_NOT_WHITELISTED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d03711a645ac13b3887baa10c28f347997e96617340d7ffae036e653d4c59185",
                          "typeString": "literal_string \"ERR_NOT_WHITELISTED\""
                        }
                      ],
                      "id": 9740,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "18350:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18350:207:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9763,
                  "nodeType": "ExpressionStatement",
                  "src": "18350:207:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9765,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9714,
                        "src": "18587:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9766,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9716,
                        "src": "18601:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9767,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9718,
                        "src": "18615:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9768,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9720,
                        "src": "18624:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9769,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9722,
                        "src": "18633:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 9764,
                      "name": "doConvert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9789,
                      "src": "18577:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$_t_address_$_t_address_payable_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256,address,address payable) returns (uint256)"
                      }
                    },
                    "id": 9770,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18577:69:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9732,
                  "id": 9771,
                  "nodeType": "Return",
                  "src": "18570:76:8"
                }
              ]
            },
            "documentation": {
              "id": 9712,
              "nodeType": "StructuredDocumentation",
              "src": "17297:569:8",
              "text": " @dev converts a specific amount of source tokens to target tokens\n can only be called by the bancor network contract\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "functionSelector": "e8dc12ff",
            "id": 9773,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9726,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9725,
                  "name": "protected",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22231,
                  "src": "18065:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18065:9:8"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9728,
                    "name": "BANCOR_NETWORK",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21530,
                    "src": "18089:14:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 9729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9727,
                  "name": "only",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21577,
                  "src": "18084:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18084:20:8"
              }
            ],
            "name": "convert",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9724,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18030:8:8"
            },
            "parameters": {
              "id": 9723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9714,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17889:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9713,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "17889:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9716,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17915:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9715,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "17915:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9718,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17941:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9717,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17941:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9720,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17958:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17958:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9722,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "17975:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9721,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17975:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17888:116:8"
            },
            "returnParameters": {
              "id": 9732,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9731,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9773,
                  "src": "18123:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9730,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18123:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18122:9:8"
            },
            "scope": 10039,
            "src": "17872:782:8",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": null,
            "documentation": {
              "id": 9774,
              "nodeType": "StructuredDocumentation",
              "src": "18662:615:8",
              "text": " @dev converts a specific amount of source tokens to target tokens\n called by ConverterBase and allows the inherited contracts to implement custom conversion logic\n @param _sourceToken source ERC20 token\n @param _targetToken target ERC20 token\n @param _amount      amount of tokens to convert (in units of the source token)\n @param _trader      address of the caller who executed the conversion\n @param _beneficiary wallet to receive the conversion result\n @return amount of tokens received (in units of the target token)"
            },
            "id": 9789,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "doConvert",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9776,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19312:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9775,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "19312:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9778,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19347:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9777,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "19347:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9780,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19382:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9779,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19382:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9782,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19408:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9781,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19408:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9784,
                  "mutability": "mutable",
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19434:28:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9783,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19434:15:8",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19301:162:8"
            },
            "returnParameters": {
              "id": 9788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9787,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9789,
                  "src": "19517:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19517:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19516:9:8"
            },
            "scope": 10039,
            "src": "19283:243:8",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9805,
              "nodeType": "Block",
              "src": "19790:78:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9802,
                        "name": "PPM_RESOLUTION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9007,
                        "src": "19845:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9799,
                            "name": "conversionFee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9051,
                            "src": "19826:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9797,
                            "name": "_targetAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9792,
                            "src": "19808:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 9798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22327,
                          "src": "19808:17:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 9800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19808:32:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 9801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22353,
                      "src": "19808:36:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 9803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19808:52:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 9796,
                  "id": 9804,
                  "nodeType": "Return",
                  "src": "19801:59:8"
                }
              ]
            },
            "documentation": {
              "id": 9790,
              "nodeType": "StructuredDocumentation",
              "src": "19534:173:8",
              "text": " @dev returns the conversion fee for a given target amount\n @param _targetAmount  target amount\n @return conversion fee"
            },
            "id": 9806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "calculateFee",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9793,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9792,
                  "mutability": "mutable",
                  "name": "_targetAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9806,
                  "src": "19735:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9791,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19735:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19734:23:8"
            },
            "returnParameters": {
              "id": 9796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9795,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9806,
                  "src": "19781:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "19781:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19780:9:8"
            },
            "scope": 10039,
            "src": "19713:155:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9843,
              "nodeType": "Block",
              "src": "20153:230:8",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    },
                    "id": 9817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9815,
                      "name": "_reserveToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9809,
                      "src": "20168:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9816,
                      "name": "ETH_RESERVE_ADDRESS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9012,
                      "src": "20185:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "src": "20168:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9829,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "20303:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9831,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9830,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20312:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20303:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9832,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "20303:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9837,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "20369:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                  "typeString": "contract ConverterBase"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                  "typeString": "contract ConverterBase"
                                }
                              ],
                              "id": 9836,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20361:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 9835,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "20361:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 9838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20361:13:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9833,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20337:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "id": 9834,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "balanceOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21088,
                          "src": "20337:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view external returns (uint256)"
                          }
                        },
                        "id": 9839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "20337:38:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20303:72:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9841,
                    "nodeType": "ExpressionStatement",
                    "src": "20303:72:8"
                  },
                  "id": 9842,
                  "nodeType": "IfStatement",
                  "src": "20164:211:8",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9827,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9818,
                            "name": "reserves",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9040,
                            "src": "20219:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                              "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                            }
                          },
                          "id": 9820,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9819,
                            "name": "_reserveToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9809,
                            "src": "20228:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20Token_$21127",
                              "typeString": "contract IERC20Token"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20219:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                            "typeString": "struct ConverterBase.Reserve storage ref"
                          }
                        },
                        "id": 9821,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "20219:31:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 9824,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "20261:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ConverterBase_$10039",
                                "typeString": "contract ConverterBase"
                              }
                            ],
                            "id": 9823,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "20253:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 9822,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "20253:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 9825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20253:13:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 9826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "20253:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20219:55:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9828,
                    "nodeType": "ExpressionStatement",
                    "src": "20219:55:8"
                  }
                }
              ]
            },
            "documentation": {
              "id": 9807,
              "nodeType": "StructuredDocumentation",
              "src": "19876:179:8",
              "text": " @dev syncs the stored reserve balance for a given reserve with the real reserve balance\n @param _reserveToken    address of the reserve token"
            },
            "id": 9844,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 9812,
                    "name": "_reserveToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9809,
                    "src": "20138:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  }
                ],
                "id": 9813,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9811,
                  "name": "validReserve",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9172,
                  "src": "20125:12:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_IERC20Token_$21127_$",
                    "typeString": "modifier (contract IERC20Token)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20125:27:8"
              }
            ],
            "name": "syncReserveBalance",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9809,
                  "mutability": "mutable",
                  "name": "_reserveToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9844,
                  "src": "20089:25:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9808,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "20089:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20088:27:8"
            },
            "returnParameters": {
              "id": 9814,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20153:0:8"
            },
            "scope": 10039,
            "src": "20061:322:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9870,
              "nodeType": "Block",
              "src": "20496:165:8",
              "statements": [
                {
                  "assignments": [
                    9849
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9849,
                      "mutability": "mutable",
                      "name": "reserveCount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9870,
                      "src": "20507:20:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9848,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "20507:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9852,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 9850,
                      "name": "reserveTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9036,
                      "src": "20530:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 9851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "20530:20:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20507:43:8"
                },
                {
                  "body": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 9864,
                            "name": "reserveTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9036,
                            "src": "20636:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                              "typeString": "contract IERC20Token[] storage ref"
                            }
                          },
                          "id": 9866,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 9865,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9854,
                            "src": "20650:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "20636:16:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IERC20Token_$21127",
                            "typeString": "contract IERC20Token"
                          }
                        ],
                        "id": 9863,
                        "name": "syncReserveBalance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9844,
                        "src": "20617:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20Token_$21127_$returns$__$",
                          "typeString": "function (contract IERC20Token)"
                        }
                      },
                      "id": 9867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "20617:36:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 9868,
                    "nodeType": "ExpressionStatement",
                    "src": "20617:36:8"
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 9859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 9857,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9854,
                      "src": "20581:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 9858,
                      "name": "reserveCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9849,
                      "src": "20585:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20581:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 9869,
                  "initializationExpression": {
                    "assignments": [
                      9854
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 9854,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 9869,
                        "src": "20566:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9853,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20566:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 9856,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9855,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20578:1:8",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "20566:13:8"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 9861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "20599:3:8",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 9860,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9854,
                        "src": "20599:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 9862,
                    "nodeType": "ExpressionStatement",
                    "src": "20599:3:8"
                  },
                  "nodeType": "ForStatement",
                  "src": "20561:92:8"
                }
              ]
            },
            "documentation": {
              "id": 9845,
              "nodeType": "StructuredDocumentation",
              "src": "20391:59:8",
              "text": " @dev syncs all stored reserve balances"
            },
            "id": 9871,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "syncReserveBalances",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20484:2:8"
            },
            "returnParameters": {
              "id": 9847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20496:0:8"
            },
            "scope": 10039,
            "src": "20456:205:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9907,
              "nodeType": "Block",
              "src": "21324:518:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 9892,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 9888,
                          "name": "_feeAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9884,
                          "src": "21705:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          },
                          "id": 9891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 9889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21718:1:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "**",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "323535",
                            "id": 9890,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21723:3:8",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_255_by_1",
                              "typeString": "int_const 255"
                            },
                            "value": "255"
                          },
                          "src": "21718:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                            "typeString": "int_const 5789...(69 digits omitted)...9968"
                          }
                        },
                        "src": "21705:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 9887,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "21698:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 9893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21698:29:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9894,
                  "nodeType": "ExpressionStatement",
                  "src": "21698:29:8"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9896,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9874,
                        "src": "21754:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9897,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9876,
                        "src": "21768:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9898,
                        "name": "_trader",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9878,
                        "src": "21782:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9899,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9880,
                        "src": "21791:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9900,
                        "name": "_returnAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9882,
                        "src": "21800:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9903,
                            "name": "_feeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9884,
                            "src": "21822:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 9902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21815:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_int256_$",
                            "typeString": "type(int256)"
                          },
                          "typeName": {
                            "id": 9901,
                            "name": "int256",
                            "nodeType": "ElementaryTypeName",
                            "src": "21815:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 9904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21815:18:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      ],
                      "id": 9895,
                      "name": "Conversion",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9078,
                      "src": "21743:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_address_$_t_uint256_$_t_uint256_$_t_int256_$returns$__$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,address,uint256,uint256,int256)"
                      }
                    },
                    "id": 9905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21743:91:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9906,
                  "nodeType": "EmitStatement",
                  "src": "21738:96:8"
                }
              ]
            },
            "documentation": {
              "id": 9872,
              "nodeType": "StructuredDocumentation",
              "src": "20669:409:8",
              "text": " @dev helper, dispatches the Conversion event\n @param _sourceToken     source ERC20 token\n @param _targetToken     target ERC20 token\n @param _trader          address of the caller who executed the conversion\n @param _amount          amount purchased/sold (in the source token)\n @param _returnAmount    amount returned (in the target token)"
            },
            "id": 9908,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "dispatchConversionEvent",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9885,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9874,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21127:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9873,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "21127:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9876,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21162:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9875,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "21162:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9878,
                  "mutability": "mutable",
                  "name": "_trader",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21197:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21197:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9880,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21223:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9879,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21223:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9882,
                  "mutability": "mutable",
                  "name": "_returnAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21249:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9881,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21249:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9884,
                  "mutability": "mutable",
                  "name": "_feeAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9908,
                  "src": "21281:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9883,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21281:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21116:184:8"
            },
            "returnParameters": {
              "id": 9886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21324:0:8"
            },
            "scope": 10039,
            "src": "21084:758:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              13297
            ],
            "body": {
              "id": 9917,
              "nodeType": "Block",
              "src": "22030:32:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9915,
                    "name": "anchor",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9030,
                    "src": "22048:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "functionReturnParameters": 9914,
                  "id": 9916,
                  "nodeType": "Return",
                  "src": "22041:13:8"
                }
              ]
            },
            "documentation": {
              "id": 9909,
              "nodeType": "StructuredDocumentation",
              "src": "21850:109:8",
              "text": " @dev deprecated since version 28, backward compatibility - use only for earlier versions"
            },
            "functionSelector": "fc0c546a",
            "id": 9918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9911,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "21994:8:8"
            },
            "parameters": {
              "id": 9910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21979:2:8"
            },
            "returnParameters": {
              "id": 9914,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9913,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9918,
                  "src": "22012:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                    "typeString": "contract IConverterAnchor"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9912,
                    "name": "IConverterAnchor",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 13349,
                    "src": "22012:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IConverterAnchor_$13349",
                      "typeString": "contract IConverterAnchor"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22011:18:8"
            },
            "scope": 10039,
            "src": "21965:97:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13302
            ],
            "body": {
              "id": 9931,
              "nodeType": "Block",
              "src": "22213:53:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9928,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9921,
                        "src": "22248:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9927,
                      "name": "transferAnchorOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9381,
                      "src": "22224:23:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9929,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22224:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9930,
                  "nodeType": "ExpressionStatement",
                  "src": "22224:34:8"
                }
              ]
            },
            "documentation": {
              "id": 9919,
              "nodeType": "StructuredDocumentation",
              "src": "22070:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "21e6b53d",
            "id": 9932,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9925,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9924,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "22203:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22203:9:8"
              }
            ],
            "name": "transferTokenOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9923,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22194:8:8"
            },
            "parameters": {
              "id": 9922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9921,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9932,
                  "src": "22168:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22168:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22167:19:8"
            },
            "returnParameters": {
              "id": 9926,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22213:0:8"
            },
            "scope": 10039,
            "src": "22136:130:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13305
            ],
            "body": {
              "id": 9942,
              "nodeType": "Block",
              "src": "22398:42:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9939,
                      "name": "acceptAnchorOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9405,
                      "src": "22409:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22409:23:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9941,
                  "nodeType": "ExpressionStatement",
                  "src": "22409:23:8"
                }
              ]
            },
            "documentation": {
              "id": 9933,
              "nodeType": "StructuredDocumentation",
              "src": "22274:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "38a5e016",
            "id": 9943,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9936,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "22388:9:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22388:9:8"
              }
            ],
            "name": "acceptTokenOwnership",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9935,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22379:8:8"
            },
            "parameters": {
              "id": 9934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22369:2:8"
            },
            "returnParameters": {
              "id": 9938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22398:0:8"
            },
            "scope": 10039,
            "src": "22340:100:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13320
            ],
            "body": {
              "id": 9976,
              "nodeType": "Block",
              "src": "22621:141:8",
              "statements": [
                {
                  "assignments": [
                    9961
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9961,
                      "mutability": "mutable",
                      "name": "reserve",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9976,
                      "src": "22632:22:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                        "typeString": "struct ConverterBase.Reserve"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 9960,
                        "name": "Reserve",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9023,
                        "src": "22632:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Reserve_$9023_storage_ptr",
                          "typeString": "struct ConverterBase.Reserve"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9965,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9962,
                      "name": "reserves",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9040,
                      "src": "22657:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_contract$_IERC20Token_$21127_$_t_struct$_Reserve_$9023_storage_$",
                        "typeString": "mapping(contract IERC20Token => struct ConverterBase.Reserve storage ref)"
                      }
                    },
                    "id": 9964,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9963,
                      "name": "_address",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9946,
                      "src": "22666:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20Token_$21127",
                        "typeString": "contract IERC20Token"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22657:18:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Reserve_$9023_storage",
                      "typeString": "struct ConverterBase.Reserve storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22632:43:8"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9966,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22693:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9967,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9014,
                        "src": "22693:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9968,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22710:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9969,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "weight",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9016,
                        "src": "22710:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22726:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 9971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22733:5:8",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 9972,
                          "name": "reserve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9961,
                          "src": "22740:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Reserve_$9023_memory_ptr",
                            "typeString": "struct ConverterBase.Reserve memory"
                          }
                        },
                        "id": 9973,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 9022,
                        "src": "22740:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 9974,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "22692:62:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint32_$_t_bool_$_t_bool_$_t_bool_$",
                      "typeString": "tuple(uint256,uint32,bool,bool,bool)"
                    }
                  },
                  "functionReturnParameters": 9959,
                  "id": 9975,
                  "nodeType": "Return",
                  "src": "22686:68:8"
                }
              ]
            },
            "documentation": {
              "id": 9944,
              "nodeType": "StructuredDocumentation",
              "src": "22448:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "0e53aae9",
            "id": 9977,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectors",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9948,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22568:8:8"
            },
            "parameters": {
              "id": 9947,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9946,
                  "mutability": "mutable",
                  "name": "_address",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22534:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9945,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "22534:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22533:22:8"
            },
            "returnParameters": {
              "id": 9959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9950,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22586:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22586:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9952,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22595:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 9951,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22595:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9954,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22603:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9953,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22603:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9956,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22609:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9955,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22609:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9958,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9977,
                  "src": "22615:4:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9957,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22615:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22585:35:8"
            },
            "scope": 10039,
            "src": "22514:248:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13334
            ],
            "body": {
              "id": 9991,
              "nodeType": "Block",
              "src": "22920:61:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 9986,
                        "name": "ConverterBase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10039,
                        "src": "22938:13:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ConverterBase_$10039_$",
                          "typeString": "type(contract ConverterBase)"
                        }
                      },
                      "id": 9987,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "reserveTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9036,
                      "src": "22938:27:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_IERC20Token_$21127_$dyn_storage",
                        "typeString": "contract IERC20Token[] storage ref"
                      }
                    },
                    "id": 9989,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9988,
                      "name": "_index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9980,
                      "src": "22966:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22938:35:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "functionReturnParameters": 9985,
                  "id": 9990,
                  "nodeType": "Return",
                  "src": "22931:42:8"
                }
              ]
            },
            "documentation": {
              "id": 9978,
              "nodeType": "StructuredDocumentation",
              "src": "22770:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "19b64015",
            "id": 9992,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectorTokens",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9982,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "22889:8:8"
            },
            "parameters": {
              "id": 9981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9980,
                  "mutability": "mutable",
                  "name": "_index",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9992,
                  "src": "22861:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9979,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "22861:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22860:16:8"
            },
            "returnParameters": {
              "id": 9985,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9984,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9992,
                  "src": "22907:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9983,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "22907:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22906:13:8"
            },
            "scope": 10039,
            "src": "22836:145:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13339
            ],
            "body": {
              "id": 10002,
              "nodeType": "Block",
              "src": "23124:45:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9999,
                      "name": "reserveTokenCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9561,
                      "src": "23142:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_uint16_$",
                        "typeString": "function () view returns (uint16)"
                      }
                    },
                    "id": 10000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23142:19:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "functionReturnParameters": 9998,
                  "id": 10001,
                  "nodeType": "Return",
                  "src": "23135:26:8"
                }
              ]
            },
            "documentation": {
              "id": 9993,
              "nodeType": "StructuredDocumentation",
              "src": "22989:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "71f52bf3",
            "id": 10003,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "connectorTokenCount",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9995,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23098:8:8"
            },
            "parameters": {
              "id": 9994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23083:2:8"
            },
            "returnParameters": {
              "id": 9998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9997,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10003,
                  "src": "23116:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 9996,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "23116:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23115:8:8"
            },
            "scope": 10039,
            "src": "23055:114:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              13327
            ],
            "body": {
              "id": 10016,
              "nodeType": "Block",
              "src": "23340:57:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10013,
                        "name": "_connectorToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10006,
                        "src": "23373:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      ],
                      "id": 10012,
                      "name": "reserveBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9699,
                      "src": "23358:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$returns$_t_uint256_$",
                        "typeString": "function (contract IERC20Token) view returns (uint256)"
                      }
                    },
                    "id": 10014,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23358:31:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10011,
                  "id": 10015,
                  "nodeType": "Return",
                  "src": "23351:38:8"
                }
              ]
            },
            "documentation": {
              "id": 10004,
              "nodeType": "StructuredDocumentation",
              "src": "23177:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "d8959512",
            "id": 10017,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getConnectorBalance",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 10008,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "23313:8:8"
            },
            "parameters": {
              "id": 10007,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10006,
                  "mutability": "mutable",
                  "name": "_connectorToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10017,
                  "src": "23272:27:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10005,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23272:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23271:29:8"
            },
            "returnParameters": {
              "id": 10011,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10010,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10017,
                  "src": "23331:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10009,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23331:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23330:9:8"
            },
            "scope": 10039,
            "src": "23243:154:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10037,
              "nodeType": "Block",
              "src": "23598:81:8",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10032,
                        "name": "_sourceToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10020,
                        "src": "23635:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10033,
                        "name": "_targetToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10022,
                        "src": "23649:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10034,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10024,
                        "src": "23663:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20Token_$21127",
                          "typeString": "contract IERC20Token"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 10031,
                      "name": "targetAmountAndFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9256,
                      "src": "23616:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20Token_$21127_$_t_contract$_IERC20Token_$21127_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (contract IERC20Token,contract IERC20Token,uint256) view returns (uint256,uint256)"
                      }
                    },
                    "id": 10035,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23616:55:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 10030,
                  "id": 10036,
                  "nodeType": "Return",
                  "src": "23609:62:8"
                }
              ]
            },
            "documentation": {
              "id": 10018,
              "nodeType": "StructuredDocumentation",
              "src": "23405:60:8",
              "text": " @dev deprecated, backward compatibility"
            },
            "functionSelector": "1e1401f8",
            "id": 10038,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReturn",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10025,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10020,
                  "mutability": "mutable",
                  "name": "_sourceToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23490:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10019,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23490:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10022,
                  "mutability": "mutable",
                  "name": "_targetToken",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23516:24:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Token_$21127",
                    "typeString": "contract IERC20Token"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 10021,
                    "name": "IERC20Token",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21127,
                    "src": "23516:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Token_$21127",
                      "typeString": "contract IERC20Token"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10024,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23542:15:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10023,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23542:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23489:69:8"
            },
            "returnParameters": {
              "id": 10030,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10027,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23580:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10026,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23580:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10029,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10038,
                  "src": "23589:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23589:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23579:18:8"
            },
            "scope": 10039,
            "src": "23471:208:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 10040,
        "src": "1648:22034:8"
      }
    ],
    "src": "52:23632:8"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2020-10-20T08:24:47.712Z",
  "devdoc": {
    "details": "ConverterBase The converter contains the main logic for conversions between different ERC20 tokens. It is also the upgradable part of the mechanism (note that upgrades are opt-in). The anchor must be set on construction and cannot be changed afterwards. Wrappers are provided for some of the anchor's functions, for easier access. Once the converter accepts ownership of the anchor, it becomes the anchor's sole controller and can execute any of its functions. To upgrade the converter, anchor ownership must be transferred to a new converter, along with any relevant data. Note that the converter can transfer anchor ownership to a new converter that doesn't allow upgrades anymore, for finalizing the relationship between the converter and the anchor. Converter types (defined as uint16 type) - 0 = liquid token converter 1 = liquidity pool v1 converter 2 = liquidity pool v2 converter Note that converters don't currently support tokens with transfer fees.",
    "events": {
      "Activation(uint16,address,bool)": {
        "details": "triggered when the converter is activated",
        "params": {
          "_activated": "true if the converter was activated, false if it was deactivated",
          "_anchor": "converter anchor",
          "_type": "converter type"
        }
      },
      "Conversion(address,address,address,uint256,uint256,int256)": {
        "details": "triggered when a conversion between two tokens occurs",
        "params": {
          "_amount": "amount converted, in the source token",
          "_conversionFee": "conversion fee",
          "_fromToken": "source ERC20 token",
          "_return": "amount returned, minus conversion fee",
          "_toToken": "target ERC20 token",
          "_trader": "wallet that initiated the trade"
        }
      },
      "ConversionFeeUpdate(uint32,uint32)": {
        "details": "triggered when the conversion fee is updated",
        "params": {
          "_newFee": "new fee percentage, represented in ppm",
          "_prevFee": "previous fee percentage, represented in ppm"
        }
      },
      "TokenRateUpdate(address,address,uint256,uint256)": {
        "details": "triggered when the rate between two tokens in the converter changes note that the event might be dispatched for rate updates between any two tokens in the converter note that prior to version 28, you should use the 'PriceDataUpdate' event instead",
        "params": {
          "_rateD": "rate of 1 unit of `_token1` in `_token2` (denominator)",
          "_rateN": "rate of 1 unit of `_token1` in `_token2` (numerator)",
          "_token1": "address of the first token",
          "_token2": "address of the second token"
        }
      }
    },
    "kind": "dev",
    "methods": {
      "acceptAnchorOwnership()": {
        "details": "accepts ownership of the anchor after an ownership transfer most converters are also activated as soon as they accept the anchor ownership can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead"
      },
      "acceptOwnership()": {
        "details": "used by a new owner to accept an ownership transfer"
      },
      "acceptTokenOwnership()": {
        "details": "deprecated, backward compatibility"
      },
      "addReserve(address,uint32)": {
        "details": "defines a new reserve token for the converter can only be called by the owner while the converter is inactive",
        "params": {
          "_token": "address of the reserve token",
          "_weight": "reserve weight, represented in ppm, 1-1000000"
        }
      },
      "connectorTokenCount()": {
        "details": "deprecated, backward compatibility"
      },
      "connectorTokens(uint256)": {
        "details": "deprecated, backward compatibility"
      },
      "connectors(address)": {
        "details": "deprecated, backward compatibility"
      },
      "constructor": {
        "details": "used by sub-contracts to initialize a new converter",
        "params": {
          "_anchor": "anchor governed by the converter",
          "_maxConversionFee": "maximum conversion fee, represented in ppm",
          "_registry": "address of a contract registry contract"
        }
      },
      "convert(address,address,uint256,address,address)": {
        "details": "converts a specific amount of source tokens to target tokens can only be called by the bancor network contract",
        "params": {
          "_amount": "amount of tokens to convert (in units of the source token)",
          "_beneficiary": "wallet to receive the conversion result",
          "_sourceToken": "source ERC20 token",
          "_targetToken": "target ERC20 token",
          "_trader": "address of the caller who executed the conversion"
        },
        "returns": {
          "_0": "amount of tokens received (in units of the target token)"
        }
      },
      "getConnectorBalance(address)": {
        "details": "deprecated, backward compatibility"
      },
      "getReturn(address,address,uint256)": {
        "details": "deprecated, backward compatibility"
      },
      "hasETHReserve()": {
        "details": "checks whether or not the converter has an ETH reserve",
        "returns": {
          "_0": "true if the converter has an ETH reserve, false otherwise"
        }
      },
      "isActive()": {
        "details": "returns true if the converter is active, false otherwise",
        "returns": {
          "_0": "true if the converter is active, false otherwise"
        }
      },
      "isV28OrHigher()": {
        "details": "checks whether or not the converter version is 28 or higher",
        "returns": {
          "_0": "true, since the converter version is 28 or higher"
        }
      },
      "reserveBalance(address)": {
        "details": "returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead",
        "params": {
          "_reserveToken": "reserve token contract address"
        },
        "returns": {
          "_0": "reserve balance"
        }
      },
      "reserveTokenCount()": {
        "details": "returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead",
        "returns": {
          "_0": "number of reserve tokens"
        }
      },
      "reserveWeight(address)": {
        "details": "returns the reserve's weight added in version 28",
        "params": {
          "_reserveToken": "reserve token contract address"
        },
        "returns": {
          "_0": "reserve weight"
        }
      },
      "restoreRegistry()": {
        "details": "restores the previous contract-registry"
      },
      "restrictRegistryUpdate(bool)": {
        "details": "restricts the permission to update the contract-registry",
        "params": {
          "_onlyOwnerCanUpdateRegistry": "indicates whether or not permission is restricted to owner only"
        }
      },
      "setConversionFee(uint32)": {
        "details": "updates the current conversion fee can only be called by the contract owner",
        "params": {
          "_conversionFee": "new conversion fee, represented in ppm"
        }
      },
      "setConversionWhitelist(address)": {
        "details": "allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract",
        "params": {
          "_whitelist": "address of a whitelist contract"
        }
      },
      "token()": {
        "details": "deprecated since version 28, backward compatibility - use only for earlier versions"
      },
      "transferAnchorOwnership(address)": {
        "details": "transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead",
        "params": {
          "_newOwner": "new token owner"
        }
      },
      "transferOwnership(address)": {
        "details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
        "params": {
          "_newOwner": "new contract owner"
        }
      },
      "transferTokenOwnership(address)": {
        "details": "deprecated, backward compatibility"
      },
      "updateRegistry()": {
        "details": "updates to the new contract-registry"
      },
      "upgrade()": {
        "details": "upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade"
      },
      "withdrawETH(address)": {
        "details": "withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve",
        "params": {
          "_to": "address to send the ETH to"
        }
      },
      "withdrawFromAnchor(address,address,uint256)": {
        "details": "withdraws tokens held by the anchor and sends them to an account can only be called by the owner",
        "params": {
          "_amount": "amount to withdraw",
          "_to": "account to receive the new amount",
          "_token": "ERC20 token contract address"
        }
      },
      "withdrawTokens(address,address,uint256)": {
        "details": "withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract",
        "params": {
          "_amount": "amount to withdraw",
          "_to": "account to receive the new amount",
          "_token": "ERC20 token contract address"
        }
      }
    },
    "stateVariables": {
      "version": {
        "details": "version number"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}