{
  "contractName": "GoodReserveCDai",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_dai",
          "type": "address"
        },
        {
          "internalType": "contract cERC20",
          "name": "_cDai",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_fundManager",
          "type": "address"
        },
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_marketMaker",
          "type": "address"
        },
        {
          "internalType": "contract ContributionCalc",
          "name": "_contribution",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockInterval",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ContributionAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "name": "SchemeEnded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "time",
          "type": "uint256"
        }
      ],
      "name": "SchemeStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reserveAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "actualReturn",
          "type": "uint256"
        }
      ],
      "name": "TokenPurchased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reserveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "contributionAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "minReturn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "actualReturn",
          "type": "uint256"
        }
      ],
      "name": "TokenSold",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "day",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "interestToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "interestReceived",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdInterestMinted",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdExpansionMinted",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdInterestTransferred",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gdUbiTransferred",
          "type": "uint256"
        }
      ],
      "name": "UBIMinted",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "blockInterval",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cDai",
      "outputs": [
        {
          "internalType": "contract cERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "contribution",
      "outputs": [
        {
          "internalType": "contract ContributionCalc",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "dai",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fundManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "identity",
      "outputs": [
        {
          "internalType": "contract Identity",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "scheme",
          "type": "address"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lastMinted",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "marketMaker",
      "outputs": [
        {
          "internalType": "contract GoodMarketMaker",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        }
      ],
      "name": "setAvatar",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract Identity",
          "name": "_identity",
          "type": "address"
        }
      ],
      "name": "setIdentity",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "start",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_marketMaker",
          "type": "address"
        }
      ],
      "name": "setMarketMaker",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_fundManager",
          "type": "address"
        }
      ],
      "name": "setFundManager",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockInterval",
          "type": "uint256"
        }
      ],
      "name": "setBlockInterval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_contribution",
          "type": "address"
        }
      ],
      "name": "setContributionAddress",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_buyWith",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_tokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minReturn",
          "type": "uint256"
        }
      ],
      "name": "buy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_sellTo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gdAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minReturn",
          "type": "uint256"
        }
      ],
      "name": "sell",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "currentPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "canMint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_interestToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_transfered",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_interest",
          "type": "uint256"
        }
      ],
      "name": "mintInterestAndUBI",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "end",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "recover",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_dai\",\"type\":\"address\"},{\"internalType\":\"contract cERC20\",\"name\":\"_cDai\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_fundManager\",\"type\":\"address\"},{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"},{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_marketMaker\",\"type\":\"address\"},{\"internalType\":\"contract ContributionCalc\",\"name\":\"_contribution\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockInterval\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"prevAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ContributionAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"SchemeEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"SchemeStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minReturn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualReturn\",\"type\":\"uint256\"}],\"name\":\"TokenPurchased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"contributionAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minReturn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"actualReturn\",\"type\":\"uint256\"}],\"name\":\"TokenSold\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"day\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"interestToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"interestReceived\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdInterestMinted\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdExpansionMinted\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdInterestTransferred\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gdUbiTransferred\",\"type\":\"uint256\"}],\"name\":\"UBIMinted\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"blockInterval\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_buyWith\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minReturn\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cDai\",\"outputs\":[{\"internalType\":\"contract cERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"canMint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contribution\",\"outputs\":[{\"internalType\":\"contract ContributionCalc\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"currentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"dai\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"end\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"identity\",\"outputs\":[{\"internalType\":\"contract Identity\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"scheme\",\"type\":\"address\"}],\"name\":\"isRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"marketMaker\",\"outputs\":[{\"internalType\":\"contract GoodMarketMaker\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_interestToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_transfered\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_interest\",\"type\":\"uint256\"}],\"name\":\"mintInterestAndUBI\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"recover\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"_sellTo\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gdAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minReturn\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Avatar\",\"name\":\"_avatar\",\"type\":\"address\"}],\"name\":\"setAvatar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockInterval\",\"type\":\"uint256\"}],\"name\":\"setBlockInterval\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contribution\",\"type\":\"address\"}],\"name\":\"setContributionAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fundManager\",\"type\":\"address\"}],\"name\":\"setFundManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"contract Identity\",\"name\":\"_identity\",\"type\":\"address\"}],\"name\":\"setIdentity\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_marketMaker\",\"type\":\"address\"}],\"name\":\"setMarketMaker\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"start\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"buy(address,uint256,uint256)\":{\"details\":\"Converts `buyWith` tokens to GD tokens and updates the bonding curve params. `buy` occurs only if the GD return is above the given minimum. It is possible to buy only with cDAI and when the contract is set to active. MUST call to `buyWith` `approve` prior this action to allow this contract to accomplish the conversion.\",\"params\":{\"_buyWith\":\"The tokens that should be converted to GD tokens\",\"_minReturn\":\"The minimum allowed return in GD tokens\",\"_tokenAmount\":\"The amount of `buyWith` tokens that should be converted to GD tokens\"},\"return\":\"(gdReturn) How much GD tokens were transferred\"},\"canMint()\":{\"details\":\"Checks if enough blocks have passed so it would be possible to execute `mintInterestAndUBI` according to the length of `blockInterval`\",\"return\":\"(bool) True if enough blocks have passed\"},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"_avatar\":\"The avatar of the DAO\",\"_blockInterval\":\"How many blocks should be passed before the next execution of `mintInterestAndUBI`\",\"_cDai\":\"The address of cDAI\",\"_contribution\":\"The address of the contribution contract\",\"_dai\":\"The address of DAI\",\"_fundManager\":\"The address of the fund manager contract\",\"_identity\":\"The identity contract\",\"_marketMaker\":\"The address of the market maker contract\"}},\"currentPrice(address)\":{\"details\":\"Current price of GD in `token`. currently only cDAI is supported.\",\"params\":{\"_token\":\"The desired reserve token to have\"},\"return\":\"price of GD\"},\"end()\":{\"details\":\"Making the contract inactive after it has transferred the cDAI funds to `_avatar` and has transferred the market maker ownership to `_avatar`. Inactive means that buy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can executes this method\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"isRegistered()\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"isRegistered(address)\":{\"details\":\"function to see if an avatar has been set and if this scheme is registered\",\"return\":\"true if scheme is registered\"},\"mintInterestAndUBI(address,uint256,uint256)\":{\"details\":\"Anyone can call this to trigger calculations. Reserve sends UBI to Avatar DAO and returns interest to FundManager.\",\"params\":{\"_interest\":\"Out of total transfered how much is the interest (in `_interestToken`) that needs to be paid back (some interest might be donated)\",\"_interestToken\":\"The token that was transfered to the reserve\",\"_transfered\":\"How much was transfered to the reserve for UBI in `_interestToken`\"},\"return\":\"(gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"recover(address)\":{\"details\":\"method to recover any stuck erc20 tokens (ie compound COMP)\",\"params\":{\"_token\":\"the ERC20 token to recover\"}},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"sell(address,uint256,uint256)\":{\"details\":\"Converts GD tokens to `sellTo` tokens and update the bonding curve params. `sell` occurs only if the token return is above the given minimum. Notice that there is a contribution amount from the given GD that remains in the reserve. It is only possible to sell to cDAI and only when the contract is set to active. MUST be called to G$ `approve` prior to this action to allow this contract to accomplish the conversion.\",\"params\":{\"_gdAmount\":\"The amount of GD tokens that should be converted to `_sellTo` tokens\",\"_minReturn\":\"The minimum allowed `sellTo` tokens return\",\"_sellTo\":\"The tokens that will be received after the conversion\"},\"return\":\"(tokenReturn) How much `sellTo` tokens were transferred\"},\"setAvatar(address)\":{\"details\":\"Function to set a new avatar and controller for scheme can only be done by owner of scheme\"},\"setBlockInterval(uint256)\":{\"details\":\"Allows the DAO to change the block interval\",\"params\":{\"_blockInterval\":\"the new value\"}},\"setContributionAddress(address)\":{\"details\":\"Allows the DAO to change the contribution formula contract\",\"params\":{\"_contribution\":\"address of the new contribution contract\"}},\"setFundManager(address)\":{\"details\":\"Allows the DAO to change the fund manager contract\",\"params\":{\"_fundManager\":\"address of the new contract\"}},\"setMarketMaker(address)\":{\"details\":\"Allows the DAO to change the market maker contract\",\"params\":{\"_marketMaker\":\"address of the new contract\"}},\"start()\":{\"details\":\"Start function. Adds this contract to identity as a feeless scheme. Can only be called if scheme is registered\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}},\"title\":\"Reserve based on cDAI and dynamic reserve ratio market maker\"},\"userdoc\":{\"methods\":{\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"}}}},\"settings\":{\"compilationTarget\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol\":\"GoodReserveCDai\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol\":{\"keccak256\":\"0x59fb5b1c4c3f68c1694f6ff5698016ac8ee9401b61e87473113dc103b7a6b0ff\",\"urls\":[\"bzz-raw://7410f43989dea44e64bed870958ce9199606dd8a9783e79fe8deca7b544164af\",\"dweb:/ipfs/QmPrrdvp2ErwL6SJSveB3JANo7ivadSMnk9gpWZD8nR7hy\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol\":{\"keccak256\":\"0xd6b17fe8c789a03e87c80046319caee9fc9c9b5ded9008b09a550027c205c5ab\",\"urls\":[\"bzz-raw://0f77e8dc5f6abeefc9a2e185c257516f7f0266ae2781dd67c18daf1aac667daf\",\"dweb:/ipfs/QmbeRqLP2MvTZifqPBSK3PUDh8TjC1RaTA8b1dRRAXahmJ\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeeFormula.sol\":{\"keccak256\":\"0x2ac93f891a65aa60b93e2b27552850dfa459b88f5a19edc29bb5bab0cc4f3eaa\",\"urls\":[\"bzz-raw://bddb94bc0230d959d2362887a253a47b91f0de6804cba8e4569a7cac47c39b5a\",\"dweb:/ipfs/QmTdkPQHRdzxJ7D7pi9cowLgYY9wVja416dhBwCsdtPEv5\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol\":{\"keccak256\":\"0x7c542d44cbd864ee0ddecbc5016d9d7eb9ce65ab463fdd9f21eb8ce3c6ffc8ea\",\"urls\":[\"bzz-raw://4753dd823c0b0cbe7d7d02e1df64ace07d7a163af3aaff12697aee70a1b45f2f\",\"dweb:/ipfs/QmPkKeH88M3f6UbHphayUbjEBNV4rmoogtDmVundzBKbFK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FormulaHolder.sol\":{\"keccak256\":\"0xb3c0d3bc21e71497784e1be11698ff501ee11545c3106bec2cae2e8af1bacd9b\",\"urls\":[\"bzz-raw://783b4e28b67231de0fbbe48e58f43f69db3f98fd7f75668edce145a55a9b5b17\",\"dweb:/ipfs/QmdeyRfeix3PGfaXqtRQpH1sjmjFpdtuGaPwnvRn7nHAWd\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/SchemeGuard.sol\":{\"keccak256\":\"0x32e1b2a172e2c22a6aa757bfcb0722cc67f64c5c2e48df3dec2737903516d565\",\"urls\":[\"bzz-raw://bee57a8eba08348e93a0c18f3ab534e67865c0fa27afe27f5cf234bd5f248915\",\"dweb:/ipfs/Qmd8aveHWcUkYWMyJrJRZPyVXj8MAMBfpBFo6g4Z2VJeo3\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/Identity.sol\":{\"keccak256\":\"0x282184478f1d618d3523b28a84a7f7003dfdc99cad120e5e358d2cce1f5fb491\",\"urls\":[\"bzz-raw://67e17ecb57b24c4fb801abc2c52c3148af3b967e28da4fb7e074d18efb7a57c1\",\"dweb:/ipfs/QmfZ8jXhdTHtxr3gfByRj4HnXnGynX7SLZWWGR8k768aGB\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityAdminRole.sol\":{\"keccak256\":\"0x8e82c45eefe0da77d017144dfad12602c68124297035937901cdd08ce48c57ff\",\"urls\":[\"bzz-raw://e20e606342b3b35f41a081294cf3f716fe7e27e81d3090daa37c5208f4ef4bc3\",\"dweb:/ipfs/QmVEhHpiwVsksnPyHkfNa5LpTBLxoP9kj5NRZUBv456ewK\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/identity/IdentityGuard.sol\":{\"keccak256\":\"0xcc395c0e8f812201b5ed1f45e7272120ee5ffe73bfe13e325dfd872aef235b22\",\"urls\":[\"bzz-raw://58f93e4b9f48ec31ac151208e4f9e6b356cc23dfc9585d846bc09bf35d6ff7be\",\"dweb:/ipfs/QmdxJHUCaFx8N66kkDhYdA4k6d2V91yBRG6sombuPxBq7X\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677.sol\":{\"keccak256\":\"0x8360b9e356df8584d95990bb7e772342b30d9e22b160f7c875fbca5c0b87453c\",\"urls\":[\"bzz-raw://97cc6e5586cedcd49462cc465a2a8fc5063d7ec6cb9533f4e0099969a75bd4b2\",\"dweb:/ipfs/QmXw6y4iXfqyJHDRrHdd5ofQ6E4cuHDw4LiYupReJ1rCBc\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677/ERC677Receiver.sol\":{\"keccak256\":\"0xc5683b28527097379ed090b28bb46e17a50a2c57ddcb3c7e028fcd04ddc64aef\",\"urls\":[\"bzz-raw://639f6b6cf65382faea738e6326d6aeb289b8b030cf02f40c54bc45ec098eda6d\",\"dweb:/ipfs/QmQi7dFcKiwUxSbzhus4CxFTdNJvUsfiqY6i3bD4RdMQrn\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677BridgeToken.sol\":{\"keccak256\":\"0x014fa09dca773b1406855e628687be50c1eb129894f45a8b5c9fc709d826968d\",\"urls\":[\"bzz-raw://23c6491c0c26471315010687d785a3724ae33198be6ed39828d1a4f7e6873cb4\",\"dweb:/ipfs/QmW62FXHtLdNGzB8Nq9XwmwHp6Jn8jgbAVyrU2j7c7w6By\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/ERC677Token.sol\":{\"keccak256\":\"0x553a103b911d77cecb2ce3f355b2370c4a23eb070593d7c8eb46f33e3a5ff141\",\"urls\":[\"bzz-raw://e37438ce280964498b77f63bbe4d1f25c55ff4c178925447a70decceda06e46c\",\"dweb:/ipfs/QmbqCLhWjZqpFBnUVb3H7LkEbAaVmhf76Ln14oWnGimYGM\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol\":{\"keccak256\":\"0x7b91359f6912641c7dbfeced9a5c47454acce7c2cab9205d00b8049d228d7b78\",\"urls\":[\"bzz-raw://3a09bc6936d0179e2e5be2687446532d63135bc537f7ab246c6a1101d4849c1f\",\"dweb:/ipfs/QmNshqF7Xu7UX8BryKYRbnRQdTfytPappxkHq5xMxF5vpE\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/BancorFormula.sol\":{\"keccak256\":\"0xa8b83d6e46b4c2b5cf29c3572df676605ec37b8ef9b51ca6627ee225d9c51a77\",\"urls\":[\"bzz-raw://021c034dffe504492175527a436c00e898dfbf508ffb4e68f3e2a059f8934b61\",\"dweb:/ipfs/QmayhA4XBR7SYRQRRgngDcjRWUfJPmgMTbwskjZaEkznJ1\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol\":{\"keccak256\":\"0x951b08d2bf3aa8d2da3322220bdff8473457ea52845a6c76ab7732bcbccaaf9a\",\"urls\":[\"bzz-raw://7728a9ba486bddaa950c37c033522af874d518e9b53e4f844320bed6e14d41eb\",\"dweb:/ipfs/QmdEFS6efb3QFWoWhvfy9xHBvykQVbfnF6raqUsn9mhAnu\"]},\"/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol\":{\"keccak256\":\"0x0fa6c1c0d54d076325a80278bf47e214dbb176b63c92bd0725983a530462794e\",\"urls\":[\"bzz-raw://87efa2ad8c36bf560ab4a3e982c518dcfa1c757595b0f2aeede8f70b8fd7a398\",\"dweb:/ipfs/QmNSdgBMBDMrv7WNXYQWhRFgRpDCW7gRW8VqPArcgE9yQH\"]},\"@daostack/arc/contracts/controller/Avatar.sol\":{\"keccak256\":\"0x4e4fb9d3bc21f42fbfc6a01e9f8aa483a59e9f447b0d604f55b587a81ec09ef4\",\"urls\":[\"bzz-raw://9d3c1c7575cf6075ea1d89921f09b9b8e322b208dacaf0446cd4f64506c999f0\",\"dweb:/ipfs/QmVGDDHAR2ByuQpbgV7BBKXGEAcbaWvejpEZYzHgaagBFK\"]},\"@daostack/arc/contracts/controller/ControllerInterface.sol\":{\"keccak256\":\"0x933e92612c90f292c7b59908958b003f1a13d90b97bed0572b566353c20974dc\",\"urls\":[\"bzz-raw://ce1fcf85b744fcce2dbd4205e3943e9b4ec36a5f0330d4bbf61e65f1a3e0e470\",\"dweb:/ipfs/QmUWiLkBDdekhpy93nTzBtxDHL6yNh6sTUM9G8VbsHcBzy\"]},\"@daostack/arc/contracts/controller/DAOToken.sol\":{\"keccak256\":\"0x9b213e4e3ceeffcfc1c962a43b70b8d763d8091a2dd713fc1989b97bb68786e6\",\"urls\":[\"bzz-raw://51d1d6e85fd90f45395a16b7a3c703c4636e836041f2a13f806e4222ef2e59c1\",\"dweb:/ipfs/QmQjeCeFf7TJzsYjT5scyZUDDixBA8Yy8YppgBuxcKPDnP\"]},\"@daostack/arc/contracts/globalConstraints/GlobalConstraintInterface.sol\":{\"keccak256\":\"0xc006c4591ec10b845a56e13f6791db2c428610953034686d52b2a934b6c8f36f\",\"urls\":[\"bzz-raw://19495cd88280e54d7ddcd043ffeff75e6d3777a0c42debcd61cae448e9497ea0\",\"dweb:/ipfs/QmYxWz7CgFmmddrcVXJKfob5Ktwykc2imNVUwLSR5WR8bJ\"]},\"@daostack/arc/contracts/libs/SafeERC20.sol\":{\"keccak256\":\"0xf6727d432f67046145b078f40c1cc4f6be7b0d12a6678ecaf457edf7550d244c\",\"urls\":[\"bzz-raw://5dba7734c4fed446c084a707761cbc66ba22b8b93ef53c8d4a22a76b6e271690\",\"dweb:/ipfs/QmP2VpPKUqLh4ZZs6LaxHVpCN1zCmiorygL9bMub4mbYCw\"]},\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0x3199053db04cdae6c9b4380921a4a4ee720b568d6a9660883b29d25fbec31bc0\",\"urls\":[\"bzz-raw://1b0ff368e21d6007c06e4cfb286fe59d7d7d3ec06283300c9be2153ba11fa93a\",\"dweb:/ipfs/QmRPq2wZM4RAcbj31dP34GCr1CSy2qy3JqfXEkdVie4HLT\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]},\"openzeppelin-solidity/contracts/lifecycle/Pausable.sol\":{\"keccak256\":\"0x3b0ed31deeba7e3c6cfbbe8092a6b427084ee390800a06acdea5c17c8185d606\",\"urls\":[\"bzz-raw://bbdbf9d3754fcdcc85aec0432fabcec914317b1c2081b43753442ed53853a34a\",\"dweb:/ipfs/QmVHWQBn5xQkQEHhyGNEeS5gjjALZEk5ZfcjFt7kL6MoLy\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x965012d27b4262d7a41f5028cbb30c51ebd9ecd4be8fb30380aaa7a3c64fbc8b\",\"urls\":[\"bzz-raw://1eb493553b27efd46c231a836a83ce50d215639feb97b4aac9f301d0fd034ff5\",\"dweb:/ipfs/QmbMdvSXcqGKxeeYvzF3VrWpoHQyVzMXBhzhAokF2Gdymv\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xba431353cb4fe70777ac026231eb5468e41aa1e81240a2b8136917acc5fff4dc\",\"urls\":[\"bzz-raw://f40c91ca270bdc9b156f339081a0fc2bbcf73cf5f62b8c73ba555df753ff6619\",\"dweb:/ipfs/QmT8y2VVjGaFdGphpcXrgvdPi2EgF9LuCDgJiJ89LvpFRV\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0xa3e68fd7f987c8fbdaf4867d428a69a15f3cf2f69709a5b0a0fbef750b0e6fbc\",\"urls\":[\"bzz-raw://50b1ff986d3b2793850a66c8429d9886fdfb134b1509b3e98714e3e2a71e24f5\",\"dweb:/ipfs/QmSQBYPeY9tbR3ciGRNQqvcWKnNiuxtVMq2MsPWpLwuGGm\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0xe195405e9993d575173cdb5dd408db7459a026b9a98085c1a3b676f020f46584\",\"urls\":[\"bzz-raw://f6beab874b52e710d2c42334e34bb5592146f7dd148d96ff32c0c474412bf2f4\",\"dweb:/ipfs/QmUKmVUX4Fif7dguPgC459cpGegiJd1s24YhgZUrBUkkDN\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\":{\"keccak256\":\"0xc4ca2883e0b0743604143952024c250bb13737ad54bb666b117efdcb766fe3a8\",\"urls\":[\"bzz-raw://bdaf72028f2dc29aa5191b2bfca315a9e3b1d58f900166bdb5ae5f500d569384\",\"dweb:/ipfs/QmZngPiWLXA9i2vp6XNPcGA23GHxT99V1Qma6iRivtbREy\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20Pausable.sol\":{\"keccak256\":\"0x37b840977505e5f6d74bc8fa3d0217facc7913d0ecf064da3e3b26494acd37de\",\"urls\":[\"bzz-raw://7456513521bae915089dfd5879b685e47f3f180ad9ffe24cc3b19275b1da28ed\",\"dweb:/ipfs/QmbM1avKkyyTHEeTs3CqheyZwgAMNzVi3iDudqBdUJ2WPM\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x079c4e23ee448f529e43bfa3c4e8fb4be52cd0318ee923a276835bedf45b93d8\",\"urls\":[\"bzz-raw://ee762ff5b7746e41d27dcbcea00c7a3034b58adb1b45ddadddb5b721aff450df\",\"dweb:/ipfs/QmdxqtgEFZjHCoiYyz6pUAQ5iBm7As25jcyEbZoTaAgyDa\"]},\"openzeppelin-solidity/contracts/utils/Address.sol\":{\"keccak256\":\"0x5c731061b804fa256fc8c05150eafe5d20b6bb94541a8f187912bf84f7033f34\",\"urls\":[\"bzz-raw://a3c2d9f046beebab7fb41b1b124a6a124a36f510f7c67365861402ac831bdc71\",\"dweb:/ipfs/QmUtASRgitregbKH83anopLtF9vFQe3BKeAjhUa6F7t9YV\"]}},\"version\":1}",
  "bytecode": "0x6080604052600280546001600160a01b03191690553480156200002157600080fd5b5060405162002b1338038062002b1383398181016040526101008110156200004857600080fd5b50805160208201516040808401516060850151608086015160a087015160c088015160e090980151600080546001600160a01b0319163317808255965198999798959794969395929493919242926002840292899289928492849284926001600160a01b031691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b0319166001600160a01b03838116919091179182905516156200019a57600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200014c57600080fd5b505afa15801562000161573d6000803e3d6000fd5b505050506040513d60208110156200017857600080fd5b5051600280546001600160a01b0319166001600160a01b039092169190911790555b506001600160a01b038116620001f7576040805162461bcd60e51b815260206004820152601960248201527f537570706c696564206964656e74697479206973206e756c6c00000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b03929092169190911790555050818310620002595760405162461bcd60e51b815260040180806020018281038252602681526020018062002aed6026913960400191505060405180910390fd5b60049290925560055560068054610100600160a81b0319166101006001600160a01b03938416021760ff19169055600780546001600160a01b03199081168b8416179091556008805482168a8416179055600a8054821689841617905560098054909116918516919091179055600b819055620002e3438262000314602090811b6200212117901c565b600c5550600d80546001600160a01b0319166001600160a01b03929092169190911790555062000338945050505050565b60008082116200032357600080fd5b60008284816200032f57fe5b04949350505050565b6127a580620003486000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638f32d59b1161010f578063c3c5a547116100a2578063efbe1c1c11610071578063efbe1c1c14610484578063f2fde38b1461048c578063f4b9fa75146104b2578063f54c42d7146104ba576101e5565b8063c3c5a54714610428578063c4c22e981461044e578063e9833c2f14610456578063eda4e6d61461047c576101e5565b8063ba6943f6116100de578063ba6943f6146103f3578063bbc19ab014610410578063be9a655514610418578063beb9716d14610420576101e5565b80638f32d59b146103665780639b089d551461036e578063a59ac6dd14610376578063ab89d2a7146103a8576101e5565b806350520b1f116101875780636209ec2d116101565780636209ec2d1461031c5780636a27246214610324578063715018a6146103565780638da5cb5b1461035e576101e5565b806350520b1f146102ae578063506ec095146102b65780635215fbf7146102d05780635d5bf178146102f6576101e5565b806322366844116101c3578063223668441461025c57806322f3e2d414610278578063232a3060146102805780632c159a1a146102a6576101e5565b8063086cfca8146101ea5780630cd865ec146102125780631f21f9af14610238575b600080fd5b6102106004803603602081101561020057600080fd5b50356001600160a01b03166104e0565b005b6102106004803603602081101561022857600080fd5b50356001600160a01b031661059b565b61024061073f565b604080516001600160a01b039092168252519081900360200190f35b61026461074e565b604080519115158252519081900360200190f35b61026461075e565b6102106004803603602081101561029657600080fd5b50356001600160a01b0316610767565b6102406107d6565b6102406107e5565b6102be6107f4565b60408051918252519081900360200190f35b610210600480360360208110156102e657600080fd5b50356001600160a01b03166107fa565b6102106004803603602081101561030c57600080fd5b50356001600160a01b03166108a9565b610240610992565b6102be6004803603606081101561033a57600080fd5b506001600160a01b0381351690602081013590604001356109a1565b610210610db5565b610240610e10565b610264610e1f565b610240610e30565b6102be6004803603606081101561038c57600080fd5b506001600160a01b038135169060208101359060400135610e3f565b6103da600480360360608110156103be57600080fd5b506001600160a01b038135169060208101359060400135611272565b6040805192835260208301919091528051918290030190f35b6102106004803603602081101561040957600080fd5b50356117a4565b6102be6117f6565b6102106117fc565b610264611ada565b6102646004803603602081101561043e57600080fd5b50356001600160a01b0316611afa565b6102be611be7565b6102be6004803603602081101561046c57600080fd5b50356001600160a01b0316611bed565b6102be611c70565b610210611c76565b610210600480360360208110156104a257600080fd5b50356001600160a01b031661203b565b610240612055565b610210600480360360208110156104d057600080fd5b50356001600160a01b0316612064565b6104e8610e1f565b6104f157600080fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b15801561054d57600080fd5b505afa158015610561573d6000803e3d6000fd5b505050506040513d602081101561057757600080fd5b5051600280546001600160a01b0319166001600160a01b0390921691909117905550565b6001546001600160a01b031633146105e8576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516001600160a01b038085169363a9059cbb936101009091049091169184916370a08231916024808301926020929190829003018186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d602081101561066e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050506040513d60208110156106e957600080fd5b505161073c576040805162461bcd60e51b815260206004820152601760248201527f7265636f766572207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b50565b6009546001600160a01b031681565b600061075930611afa565b905090565b60065460ff1681565b6001546001600160a01b031633146107b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b600d546001600160a01b031681565b60055481565b6001546001600160a01b03163314610847576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f9098c60aaa618391748d72bb3c1709ccfbeabb3d94e02c818bf11d7d87b64d15928290030190a25050565b6108b1610e1f565b6108ba57600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b5051610970576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b60065460009060ff166109eb576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085484906001600160a01b03808316911614610a48576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9657600080fd5b505afa158015610aaa573d6000803e3d6000fd5b505050506040513d6020811015610ac057600080fd5b50516040805163079cc67960e41b81523360048201526024810187905290516001600160a01b03909216916379cc67909160448082019260009290919082900301818387803b158015610b1257600080fd5b505af1158015610b26573d6000803e3d6000fd5b5050600d546009546040805163167d4a7f60e11b81526001600160a01b0392831660048201523060248201523360448201528a83166064820152608481018a9052905160009550919092169250632cfa94fe9160a480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50516009546040805163058c243360e11b81526001600160a01b038a81166004830152602482018a90526044820185905291519394506000939190921691630b18486691606480830192602092919082900301818787803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b505050506040513d6020811015610c5157600080fd5b5051905084811015610c945760405162461bcd60e51b81526004018080602001828103825260288152602001806126e06028913960400191505060405180910390fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0389169163a9059cbb9160448083019260209291908290030181600087803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b505050506040513d6020811015610d0d57600080fd5b50511515600114610d57576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051878152602081018490528082018790526060810183905290516001600160a01b0389169133917fe5dc7b09acc7972566f52bd93340cbe3fa08404d98dff6d9ff26f9ce65cb3e6f9181900360800190a39695505050505050565b610dbd610e1f565b610dc657600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6008546001600160a01b031681565b60065460009060ff16610e89576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085484906001600160a01b03808316911614610ee6576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b60408051636eb1769f60e11b8152336004820152306024820152905185916001600160a01b0388169163dd62ed3e91604480820192602092909190829003018186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d6020811015610f5f57600080fd5b50511015610f9e5760405162461bcd60e51b815260040180806020018281038252602781526020018061274a6027913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050506040513d602081101561101d57600080fd5b5051151560011461105f5760405162461bcd60e51b81526004018080602001828103825260398152602001806126826039913960400191505060405180910390fd5b6009546040805163cce7ec1360e01b81526001600160a01b038881166004830152602482018890529151600093929092169163cce7ec139160448082019260209290919082900301818787803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b505050506040513d60208110156110e257600080fd5b50519050838110156111255760405162461bcd60e51b815260040180806020018281038252602581526020018061265d6025913960400191505060405180910390fd5b600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b5051604080516340c10f1960e01b81523360048201526024810184905290516001600160a01b03909216916340c10f19916044808201926020929091908290030181600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050506040513d602081101561121a57600080fd5b5050604080518681526020810186905280820183905290516001600160a01b0388169133917f0a9521815fb3c5bc7dd6f4c9f89dc270322e46b945b104c18981f81c3f2cd1aa9181900360600190a395945050505050565b600654600090819060ff166112be576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085485906001600160a01b0380831691161461131b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b600a546001600160a01b031633146113645760405162461bcd60e51b81526004018080602001828103825260258152602001806126bb6025913960400191505060405180910390fd5b61136c611ada565b6113a75760405162461bcd60e51b81526004018080602001828103825260228152602001806127086022913960400191505060405180910390fd5b60006113b287611bed565b6009546040805163074920d360e41b81526001600160a01b038b81166004830152602482018b9052915193945060009391909216916374920d3091604480830192602092919082900301818787803b15801561140d57600080fd5b505af1158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b505160065460408051631c2eb17b60e31b815290519293506000926101009092046001600160a01b03169163e1758bd891600480820192602092909190829003018186803b15801561148857600080fd5b505afa15801561149c573d6000803e3d6000fd5b505050506040513d60208110156114b257600080fd5b50516040805163313ce56760e01b81529051919250600091611539916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b1580156114ff57600080fd5b505afa158015611513573d6000803e3d6000fd5b505050506040513d602081101561152957600080fd5b5051601b9063ffffffff6120d316565b9050600061155a82600a0a61154e8b886120ed565b9063ffffffff61212116565b6009546040805163e72a083360e01b81526001600160a01b038f811660048301529151939450600093919092169163e72a083391602480830192602092919082900301818787803b1580156115ae57600080fd5b505af11580156115c2573d6000803e3d6000fd5b505050506040513d60208110156115d857600080fd5b5051905060006115ee868463ffffffff6120d316565b9050611600818363ffffffff61214316565b90506000611614828563ffffffff61214316565b9050600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d602081101561168e57600080fd5b5051600a54604080516340c10f1960e01b81526001600160a01b03928316600482015260248101859052905191909216916340c10f199160448083019260209291908290030181600087803b1580156116e657600080fd5b505af11580156116fa573d6000803e3d6000fd5b505050506040513d602081101561171057600080fd5b5050600b5461172690439063ffffffff61212116565b600c819055508d6001600160a01b0316600c547ffbde528219eb8e3c62f749f4ae45df202cfbaf23559ca5944b59756ffcb9b7b88f8a878988604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a350919c919b50909950505050505050505050565b6001546001600160a01b031633146117f1576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600b55565b600c5481565b61180461074e565b611850576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b61185861215c565b60025460065460408051631c2eb17b60e31b815290516001600160a01b039384169363d1b7089a936101009004169163e1758bd8916004808301926020929190829003018186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d60208110156118d657600080fd5b50516040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316634c1d96ab60e11b178152600654945160e088901b6001600160e01b03191681526001600160a01b0380881660048301908152610100909704169481018590526000606482018190526080948201948552835160848301528351939690949093909260a49092019190808383885b8381101561198b578181015183820152602001611973565b50505050905090810190601f1680156119b85780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015611a1757600080fd5b815160208301805160405192949293830192919084640100000000821115611a3e57600080fd5b908301906020820185811115611a5357600080fd5b8251640100000000811182820188101715611a6d57600080fd5b82525081516020918201929091019080838360005b83811015611a9a578181015183820152602001611a82565b50505050905090810190601f168015611ac75780820380516001836020036101000a031916815260200191505b506040525050505050611ad86123c4565b565b6000600c54611af4600b544361212190919063ffffffff16565b11905090565b6001546000906001600160a01b0316611b4e576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60025460015460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015611ba657600080fd5b505afa158015611bba573d6000803e3d6000fd5b505050506040513d6020811015611bd057600080fd5b5051611bde57506000611be2565b5060015b919050565b600b5481565b6009546040805163e9833c2f60e01b81526001600160a01b0384811660048301529151600093929092169163e9833c2f91602480820192602092909190829003018186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d6020811015611c6857600080fd5b505192915050565b60045481565b6001546001600160a01b03163314611cc3576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d0e57600080fd5b505afa158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b505190508015611e14576008546006546040805163a9059cbb60e01b81526101009092046001600160a01b03908116600484015260248301859052905192169163a9059cbb916044808201926020929091908290030181600087803b158015611da057600080fd5b505af1158015611db4573d6000803e3d6000fd5b505050506040513d6020811015611dca57600080fd5b5051611e14576040805162461bcd60e51b815260206004820152601460248201527318d9185a481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b505115611edd576040805162461bcd60e51b815260206004820152601960248201527f46756e6473207472616e7366657220686173206661696c656400000000000000604482015290519081900360640190fd5b6000600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2d57600080fd5b505afa158015611f41573d6000803e3d6000fd5b505050506040513d6020811015611f5757600080fd5b50516009546006546040805163f2fde38b60e01b81526001600160a01b0361010090930483166004820152905193945091169163f2fde38b9160248082019260009290919082900301818387803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50505050806001600160a01b031663986502756040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b5050600654612037925061010090046001600160a01b031690506124aa565b5050565b612043610e1f565b61204c57600080fd5b61073c8161253c565b6007546001600160a01b031681565b6001546001600160a01b031633146120b1576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156120e257600080fd5b508082035b92915050565b600081612112612109856b033b2e3c9fd0803ce80000006125aa565b6002850461260d565b8161211957fe5b049392505050565b600080821161212f57600080fd5b600082848161213a57fe5b04949350505050565b60008282018381101561215557600080fd5b9392505050565b61216461074e565b6121b0576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b6002546003546040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316635f539d6960e01b17815260015494516368db844d60e11b81526001600160a01b03968716600482018181529688169582018690526000606483018190526080958301958652845160848401528451989099169863d1b7089a989197949695909493909260a40191808383885b83811015612268578181015183820152602001612250565b50505050905090810190601f1680156122955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156122b757600080fd5b505af11580156122cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156122f457600080fd5b81516020830180516040519294929383019291908464010000000082111561231b57600080fd5b90830190602082018581111561233057600080fd5b825164010000000081118282018810171561234a57600080fd5b82525081516020918201929091019080838360005b8381101561237757818101518382015260200161235f565b50505050905090810190601f1680156123a45780820380516001836020036101000a031916815260200191505b506040525050600154611ad893506001600160a01b0316915061203b9050565b60045442101580156123d7575060055442105b612418576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081a5b881c195c9a5bd9609a1b604482015290519081900360640190fd5b60065460ff1615612465576040805162461bcd60e51b815260206004820152601260248201527163616e6e6f7420737461727420747769636560701b604482015290519081900360640190fd5b6006805460ff1916600117905560408051428152905133917f727dd98701807c5fdf715b9f1fd7d87461a558e2ab3e05935add76e42e330fa3919081900360200190a2565b60065460ff166124f1576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6006805460ff1916905560408051428152905133917ef689ee9beb942c1c9c0d6642687ace05a9000d5f2979d344163c57829fa779919081900360200190a2806001600160a01b0316ff5b6001600160a01b03811661254f57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008115806125c5575050808202828282816125c257fe5b04145b6120e7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156120e7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e736665724f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e4e65656420746f207761697420666f7220746865206e65787420696e74657276616c6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374a265627a7a72315820c3ee664a127aaedcad8190ee0434ca284d20a7b3295c5bbacf9fea358ff8047564736f6c6343000510003273746172742063616e6e6f74206265206166746572206e6f7220657175616c20746f20656e64",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80638f32d59b1161010f578063c3c5a547116100a2578063efbe1c1c11610071578063efbe1c1c14610484578063f2fde38b1461048c578063f4b9fa75146104b2578063f54c42d7146104ba576101e5565b8063c3c5a54714610428578063c4c22e981461044e578063e9833c2f14610456578063eda4e6d61461047c576101e5565b8063ba6943f6116100de578063ba6943f6146103f3578063bbc19ab014610410578063be9a655514610418578063beb9716d14610420576101e5565b80638f32d59b146103665780639b089d551461036e578063a59ac6dd14610376578063ab89d2a7146103a8576101e5565b806350520b1f116101875780636209ec2d116101565780636209ec2d1461031c5780636a27246214610324578063715018a6146103565780638da5cb5b1461035e576101e5565b806350520b1f146102ae578063506ec095146102b65780635215fbf7146102d05780635d5bf178146102f6576101e5565b806322366844116101c3578063223668441461025c57806322f3e2d414610278578063232a3060146102805780632c159a1a146102a6576101e5565b8063086cfca8146101ea5780630cd865ec146102125780631f21f9af14610238575b600080fd5b6102106004803603602081101561020057600080fd5b50356001600160a01b03166104e0565b005b6102106004803603602081101561022857600080fd5b50356001600160a01b031661059b565b61024061073f565b604080516001600160a01b039092168252519081900360200190f35b61026461074e565b604080519115158252519081900360200190f35b61026461075e565b6102106004803603602081101561029657600080fd5b50356001600160a01b0316610767565b6102406107d6565b6102406107e5565b6102be6107f4565b60408051918252519081900360200190f35b610210600480360360208110156102e657600080fd5b50356001600160a01b03166107fa565b6102106004803603602081101561030c57600080fd5b50356001600160a01b03166108a9565b610240610992565b6102be6004803603606081101561033a57600080fd5b506001600160a01b0381351690602081013590604001356109a1565b610210610db5565b610240610e10565b610264610e1f565b610240610e30565b6102be6004803603606081101561038c57600080fd5b506001600160a01b038135169060208101359060400135610e3f565b6103da600480360360608110156103be57600080fd5b506001600160a01b038135169060208101359060400135611272565b6040805192835260208301919091528051918290030190f35b6102106004803603602081101561040957600080fd5b50356117a4565b6102be6117f6565b6102106117fc565b610264611ada565b6102646004803603602081101561043e57600080fd5b50356001600160a01b0316611afa565b6102be611be7565b6102be6004803603602081101561046c57600080fd5b50356001600160a01b0316611bed565b6102be611c70565b610210611c76565b610210600480360360208110156104a257600080fd5b50356001600160a01b031661203b565b610240612055565b610210600480360360208110156104d057600080fd5b50356001600160a01b0316612064565b6104e8610e1f565b6104f157600080fd5b600180546001600160a01b0319166001600160a01b03838116919091179182905560408051638da5cb5b60e01b815290519290911691638da5cb5b91600480820192602092909190829003018186803b15801561054d57600080fd5b505afa158015610561573d6000803e3d6000fd5b505050506040513d602081101561057757600080fd5b5051600280546001600160a01b0319166001600160a01b0390921691909117905550565b6001546001600160a01b031633146105e8576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600654604080516370a0823160e01b815230600482015290516001600160a01b038085169363a9059cbb936101009091049091169184916370a08231916024808301926020929190829003018186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d602081101561066e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156106bf57600080fd5b505af11580156106d3573d6000803e3d6000fd5b505050506040513d60208110156106e957600080fd5b505161073c576040805162461bcd60e51b815260206004820152601760248201527f7265636f766572207472616e73666572206661696c6564000000000000000000604482015290519081900360640190fd5b50565b6009546001600160a01b031681565b600061075930611afa565b905090565b60065460ff1681565b6001546001600160a01b031633146107b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b600d546001600160a01b031681565b60055481565b6001546001600160a01b03163314610847576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b03198316811790935560408051919092168082526020820193909352815133927f9098c60aaa618391748d72bb3c1709ccfbeabb3d94e02c818bf11d7d87b64d15928290030190a25050565b6108b1610e1f565b6108ba57600080fd5b806001600160a01b031663223668446040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b5051610970576040805162461bcd60e51b815260206004820152601a60248201527f4964656e74697479206973206e6f742072656769737465726564000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b60065460009060ff166109eb576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085484906001600160a01b03808316911614610a48576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9657600080fd5b505afa158015610aaa573d6000803e3d6000fd5b505050506040513d6020811015610ac057600080fd5b50516040805163079cc67960e41b81523360048201526024810187905290516001600160a01b03909216916379cc67909160448082019260009290919082900301818387803b158015610b1257600080fd5b505af1158015610b26573d6000803e3d6000fd5b5050600d546009546040805163167d4a7f60e11b81526001600160a01b0392831660048201523060248201523360448201528a83166064820152608481018a9052905160009550919092169250632cfa94fe9160a480820192602092909190829003018186803b158015610b9957600080fd5b505afa158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50516009546040805163058c243360e11b81526001600160a01b038a81166004830152602482018a90526044820185905291519394506000939190921691630b18486691606480830192602092919082900301818787803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b505050506040513d6020811015610c5157600080fd5b5051905084811015610c945760405162461bcd60e51b81526004018080602001828103825260288152602001806126e06028913960400191505060405180910390fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0389169163a9059cbb9160448083019260209291908290030181600087803b158015610ce357600080fd5b505af1158015610cf7573d6000803e3d6000fd5b505050506040513d6020811015610d0d57600080fd5b50511515600114610d57576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051878152602081018490528082018790526060810183905290516001600160a01b0389169133917fe5dc7b09acc7972566f52bd93340cbe3fa08404d98dff6d9ff26f9ce65cb3e6f9181900360800190a39695505050505050565b610dbd610e1f565b610dc657600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6008546001600160a01b031681565b60065460009060ff16610e89576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085484906001600160a01b03808316911614610ee6576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b60408051636eb1769f60e11b8152336004820152306024820152905185916001600160a01b0388169163dd62ed3e91604480820192602092909190829003018186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d6020811015610f5f57600080fd5b50511015610f9e5760405162461bcd60e51b815260040180806020018281038252602781526020018061274a6027913960400191505060405180910390fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b505050506040513d602081101561101d57600080fd5b5051151560011461105f5760405162461bcd60e51b81526004018080602001828103825260398152602001806126826039913960400191505060405180910390fd5b6009546040805163cce7ec1360e01b81526001600160a01b038881166004830152602482018890529151600093929092169163cce7ec139160448082019260209290919082900301818787803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b505050506040513d60208110156110e257600080fd5b50519050838110156111255760405162461bcd60e51b815260040180806020018281038252602581526020018061265d6025913960400191505060405180910390fd5b600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b5051604080516340c10f1960e01b81523360048201526024810184905290516001600160a01b03909216916340c10f19916044808201926020929091908290030181600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050506040513d602081101561121a57600080fd5b5050604080518681526020810186905280820183905290516001600160a01b0388169133917f0a9521815fb3c5bc7dd6f4c9f89dc270322e46b945b104c18981f81c3f2cd1aa9181900360600190a395945050505050565b600654600090819060ff166112be576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b60085485906001600160a01b0380831691161461131b576040805162461bcd60e51b815260206004820152601660248201527513db9b1e4818d11052481a5cc81cdd5c1c1bdc9d195960521b604482015290519081900360640190fd5b600a546001600160a01b031633146113645760405162461bcd60e51b81526004018080602001828103825260258152602001806126bb6025913960400191505060405180910390fd5b61136c611ada565b6113a75760405162461bcd60e51b81526004018080602001828103825260228152602001806127086022913960400191505060405180910390fd5b60006113b287611bed565b6009546040805163074920d360e41b81526001600160a01b038b81166004830152602482018b9052915193945060009391909216916374920d3091604480830192602092919082900301818787803b15801561140d57600080fd5b505af1158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b505160065460408051631c2eb17b60e31b815290519293506000926101009092046001600160a01b03169163e1758bd891600480820192602092909190829003018186803b15801561148857600080fd5b505afa15801561149c573d6000803e3d6000fd5b505050506040513d60208110156114b257600080fd5b50516040805163313ce56760e01b81529051919250600091611539916001600160a01b0385169163313ce56791600480820192602092909190829003018186803b1580156114ff57600080fd5b505afa158015611513573d6000803e3d6000fd5b505050506040513d602081101561152957600080fd5b5051601b9063ffffffff6120d316565b9050600061155a82600a0a61154e8b886120ed565b9063ffffffff61212116565b6009546040805163e72a083360e01b81526001600160a01b038f811660048301529151939450600093919092169163e72a083391602480830192602092919082900301818787803b1580156115ae57600080fd5b505af11580156115c2573d6000803e3d6000fd5b505050506040513d60208110156115d857600080fd5b5051905060006115ee868463ffffffff6120d316565b9050611600818363ffffffff61214316565b90506000611614828563ffffffff61214316565b9050600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d602081101561168e57600080fd5b5051600a54604080516340c10f1960e01b81526001600160a01b03928316600482015260248101859052905191909216916340c10f199160448083019260209291908290030181600087803b1580156116e657600080fd5b505af11580156116fa573d6000803e3d6000fd5b505050506040513d602081101561171057600080fd5b5050600b5461172690439063ffffffff61212116565b600c819055508d6001600160a01b0316600c547ffbde528219eb8e3c62f749f4ae45df202cfbaf23559ca5944b59756ffcb9b7b88f8a878988604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a350919c919b50909950505050505050505050565b6001546001600160a01b031633146117f1576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600b55565b600c5481565b61180461074e565b611850576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b61185861215c565b60025460065460408051631c2eb17b60e31b815290516001600160a01b039384169363d1b7089a936101009004169163e1758bd8916004808301926020929190829003018186803b1580156118ac57600080fd5b505afa1580156118c0573d6000803e3d6000fd5b505050506040513d60208110156118d657600080fd5b50516040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316634c1d96ab60e11b178152600654945160e088901b6001600160e01b03191681526001600160a01b0380881660048301908152610100909704169481018590526000606482018190526080948201948552835160848301528351939690949093909260a49092019190808383885b8381101561198b578181015183820152602001611973565b50505050905090810190601f1680156119b85780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156119da57600080fd5b505af11580156119ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015611a1757600080fd5b815160208301805160405192949293830192919084640100000000821115611a3e57600080fd5b908301906020820185811115611a5357600080fd5b8251640100000000811182820188101715611a6d57600080fd5b82525081516020918201929091019080838360005b83811015611a9a578181015183820152602001611a82565b50505050905090810190601f168015611ac75780820380516001836020036101000a031916815260200191505b506040525050505050611ad86123c4565b565b6000600c54611af4600b544361212190919063ffffffff16565b11905090565b6001546000906001600160a01b0316611b4e576040805162461bcd60e51b8152602060048201526011602482015270105d985d185c881a5cc81b9bdd081cd95d607a1b604482015290519081900360640190fd5b60025460015460408051639be2faed60e01b81526001600160a01b038681166004830152928316602482015290519190921691639be2faed916044808301926020929190829003018186803b158015611ba657600080fd5b505afa158015611bba573d6000803e3d6000fd5b505050506040513d6020811015611bd057600080fd5b5051611bde57506000611be2565b5060015b919050565b600b5481565b6009546040805163e9833c2f60e01b81526001600160a01b0384811660048301529151600093929092169163e9833c2f91602480820192602092909190829003018186803b158015611c3e57600080fd5b505afa158015611c52573d6000803e3d6000fd5b505050506040513d6020811015611c6857600080fd5b505192915050565b60045481565b6001546001600160a01b03163314611cc3576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600854604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d0e57600080fd5b505afa158015611d22573d6000803e3d6000fd5b505050506040513d6020811015611d3857600080fd5b505190508015611e14576008546006546040805163a9059cbb60e01b81526101009092046001600160a01b03908116600484015260248301859052905192169163a9059cbb916044808201926020929091908290030181600087803b158015611da057600080fd5b505af1158015611db4573d6000803e3d6000fd5b505050506040513d6020811015611dca57600080fd5b5051611e14576040805162461bcd60e51b815260206004820152601460248201527318d9185a481d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b600854604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d6020811015611e8957600080fd5b505115611edd576040805162461bcd60e51b815260206004820152601960248201527f46756e6473207472616e7366657220686173206661696c656400000000000000604482015290519081900360640190fd5b6000600660019054906101000a90046001600160a01b03166001600160a01b031663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2d57600080fd5b505afa158015611f41573d6000803e3d6000fd5b505050506040513d6020811015611f5757600080fd5b50516009546006546040805163f2fde38b60e01b81526001600160a01b0361010090930483166004820152905193945091169163f2fde38b9160248082019260009290919082900301818387803b158015611fb157600080fd5b505af1158015611fc5573d6000803e3d6000fd5b50505050806001600160a01b031663986502756040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b5050600654612037925061010090046001600160a01b031690506124aa565b5050565b612043610e1f565b61204c57600080fd5b61073c8161253c565b6007546001600160a01b031681565b6001546001600160a01b031633146120b1576040805162461bcd60e51b8152602060048201819052602482015260008051602061272a833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156120e257600080fd5b508082035b92915050565b600081612112612109856b033b2e3c9fd0803ce80000006125aa565b6002850461260d565b8161211957fe5b049392505050565b600080821161212f57600080fd5b600082848161213a57fe5b04949350505050565b60008282018381101561215557600080fd5b9392505050565b61216461074e565b6121b0576040805162461bcd60e51b815260206004820152601860248201527714d8da195b59481a5cc81b9bdd081c9959da5cdd195c995960421b604482015290519081900360640190fd5b6002546003546040805130602480830191909152825180830382018152604492830184526020810180516001600160e01b0316635f539d6960e01b17815260015494516368db844d60e11b81526001600160a01b03968716600482018181529688169582018690526000606483018190526080958301958652845160848401528451989099169863d1b7089a989197949695909493909260a40191808383885b83811015612268578181015183820152602001612250565b50505050905090810190601f1680156122955780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156122b757600080fd5b505af11580156122cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156122f457600080fd5b81516020830180516040519294929383019291908464010000000082111561231b57600080fd5b90830190602082018581111561233057600080fd5b825164010000000081118282018810171561234a57600080fd5b82525081516020918201929091019080838360005b8381101561237757818101518382015260200161235f565b50505050905090810190601f1680156123a45780820380516001836020036101000a031916815260200191505b506040525050600154611ad893506001600160a01b0316915061203b9050565b60045442101580156123d7575060055442105b612418576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd081a5b881c195c9a5bd9609a1b604482015290519081900360640190fd5b60065460ff1615612465576040805162461bcd60e51b815260206004820152601260248201527163616e6e6f7420737461727420747769636560701b604482015290519081900360640190fd5b6006805460ff1916600117905560408051428152905133917f727dd98701807c5fdf715b9f1fd7d87461a558e2ab3e05935add76e42e330fa3919081900360200190a2565b60065460ff166124f1576040805162461bcd60e51b815260206004820152600d60248201526c6973206e6f742061637469766560981b604482015290519081900360640190fd5b6006805460ff1916905560408051428152905133917ef689ee9beb942c1c9c0d6642687ace05a9000d5f2979d344163c57829fa779919081900360200190a2806001600160a01b0316ff5b6001600160a01b03811661254f57600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008115806125c5575050808202828282816125c257fe5b04145b6120e7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156120e7576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e736665724f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e4e65656420746f207761697420666f7220746865206e65787420696e74657276616c6f6e6c79204176617461722063616e2063616c6c2074686973206d6574686f64596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374a265627a7a72315820c3ee664a127aaedcad8190ee0434ca284d20a7b3295c5bbacf9fea358ff8047564736f6c63430005100032",
  "sourceMap": "1355:13643:26:-;;;443:64:7;;;-1:-1:-1;;;;;;443:64:7;;;5473:591:26;5:2:-1;;;;30:1;27;20:12;5:2;5473:591:26;;;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;5473:591:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;515:6:77;:19;;-1:-1:-1;;;;;;515:19:77;524:10;515:19;;;;549:40;;5473:591:26;;;;;;;;;;;;;;;5771:3;;5782:1;5776:7;;;5473:591;;;;;;;;;;-1:-1:-1;;;;;582:6:77;;515;549:40;;515:6;;549:40;688:6:7;:16;;-1:-1:-1;;;;;;688:16:7;-1:-1:-1;;;;;688:16:7;;;;;;;;;;;719:6;:19;715:98;;787:6;;;;;;;;;-1:-1:-1;;;;;787:6:7;-1:-1:-1;;;;;787:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;787:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;787:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;787:14:7;754:10;:48;;-1:-1:-1;;;;;;754:48:7;-1:-1:-1;;;;;754:48:7;;;;;;;;;715:98;-1:-1:-1;;;;;;483:24:11;;475:62;;;;;-1:-1:-1;;;475:62:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;547:8;:20;;-1:-1:-1;;;;;;547:20:11;-1:-1:-1;;;;;547:20:11;;;;;;;;;;-1:-1:-1;;1629:25:2;;;1621:76;;;;-1:-1:-1;;;1621:76:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1708:11;:26;;;;1744:9;:22;1776:6;:16;;-1:-1:-1;;;;;;1776:16:2;;-1:-1:-1;;;;;1776:16:2;;;;;-1:-1:-1;;1803:16:2;;;5804:3:26;:10;;-1:-1:-1;;;;;;5804:10:26;;;;;;;;;;5824:4;:12;;;;;;;;;;5846:11;:26;;;;;;;;;;5882:11;:43;;;;;;;;;;;;;;5935:13;:30;;;5988:31;:12;5935:30;5988:16;;;;;;;:31;;:::i;:::-;5975:10;:44;-1:-1:-1;6029:12:26;:28;;-1:-1:-1;;;;;;6029:28:26;-1:-1:-1;;;;;6029:28:26;;;;;;;;;;-1:-1:-1;1355:13643:26;;-1:-1:-1;;;;;1355:13643:26;778:296:76;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:76:o;1355:13643:26:-;;;;;;;",
  "deployedSourceMap": "1355:13643:26:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1355:13643:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1698:143:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1698:143:7;-1:-1:-1;;;;;1698:143:7;;:::i;:::-;;14795:201:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14795:201:26;-1:-1:-1;;;;;14795:201:26;;:::i;1686:34::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1686:34:26;;;;;;;;;;;;;;1987:102:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;274:20:2;;;:::i;6961:107:26:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6961:107:26;-1:-1:-1;;;;;6961:107:26;;:::i;278:24:11:-;;;:::i;2262:36:26:-;;;:::i;243:24:2:-;;;:::i;:::-;;;;;;;;;;;;;;;;7466:270:26;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7466:270:26;-1:-1:-1;;;;;7466:270:26;;:::i;2735:168:11:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2735:168:11;-1:-1:-1;;;;;2735:168:11;;:::i;1821:26:26:-;;;:::i;10138:987::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10138:987:26;;;;;;;;;;;;;:::i;1347:137:77:-;;;:::i;659:77::-;;;:::i;979:90::-;;;:::i;1532:18:26:-;;;:::i;8414:929::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8414:929:26;;;;;;;;;;;;;:::i;12358:1327::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12358:1327:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7189:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7189:115:26;;:::i;2113:25::-;;;:::i;6216:341::-;;;:::i;11661:114::-;;;:::i;2235:262:7:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2235:262:7;-1:-1:-1;;;;;2235:262:7;;:::i;1994:28:26:-;;;:::i;11307:122::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11307:122:26;-1:-1:-1;;;;;11307:122:26;;:::i;211:26:2:-;;;:::i;14010:643:26:-;;;:::i;1655:107:77:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:77;-1:-1:-1;;;;;1655:107:77;;:::i;1483:16:26:-;;;:::i;6697:124::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6697:124:26;-1:-1:-1;;;;;6697:124:26;;:::i;1698:143:7:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;1760:6:7;:16;;-1:-1:-1;;;;;;1760:16:7;-1:-1:-1;;;;;1760:16:7;;;;;;;;;;;1819:14;;;-1:-1:-1;;;1819:14:7;;;;:6;;;;;:12;;:14;;;;;;;;;;;;;;;:6;:14;;;5:2:-1;;;;30:1;27;20:12;5:2;1819:14:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1819:14:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1819:14:7;1786:10;:48;;-1:-1:-1;;;;;;1786:48:7;-1:-1:-1;;;;;1786:48:7;;;;;;;;;-1:-1:-1;1698:143:7:o;14795:201:26:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;14899:6:26;;14908:31;;;-1:-1:-1;;;14908:31:26;;14933:4;14908:31;;;;;;-1:-1:-1;;;;;14875:15:26;;;;;;14899:6;;;;;;;;14875:15;;14908:16;;:31;;;;;;;;;;;;;;14875:15;14908:31;;;5:2:-1;;;;30:1;27;20:12;5:2;14908:31:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14908:31:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14908:31:26;14875:65;;;-1:-1:-1;;;;;;14875:65:26;;;;;;;-1:-1:-1;;;;;14875:65:26;;;;;;;;;;;;;;;;;;;;14908:31;;14875:65;;;;;;;-1:-1:-1;14875:65:26;;;;5:2:-1;;;;30:1;27;20:12;5:2;14875:65:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14875:65:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14875:65:26;14854:135;;;;;-1:-1:-1;;;14854:135:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;14795:201;:::o;1686:34::-;;;-1:-1:-1;;;;;1686:34:26;;:::o;1987:102:7:-;2032:4;2055:27;2076:4;2055:12;:27::i;:::-;2048:34;;1987:102;:::o;274:20:2:-;;;;;;:::o;6961:107:26:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;7035:11:26;:26;;-1:-1:-1;;;;;;7035:26:26;-1:-1:-1;;;;;7035:26:26;;;;;;;;;;6961:107::o;278:24:11:-;;;-1:-1:-1;;;;;278:24:11;;:::o;2262:36:26:-;;;-1:-1:-1;;;;;2262:36:26;;:::o;243:24:2:-;;;;:::o;7466:270:26:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;7579:12:26;;;-1:-1:-1;;;;;7602:46:26;;;-1:-1:-1;;;;;;7602:46:26;;;;;;;7663:66;;;7579:12;;;;7663:66;;;;;;;;;;;;7690:10;;7663:66;;;;;;;;1000:1:7;7466:270:26;:::o;2735:168:11:-;863:9:77;:7;:9::i;:::-;855:18;;;;;;2811:9:11;-1:-1:-1;;;;;2811:22:11;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2811:24:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2811:24:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2811:24:11;2803:63;;;;;-1:-1:-1;;;2803:63:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:8;:20;;-1:-1:-1;;;;;;2876:20:11;-1:-1:-1;;;;;2876:20:11;;;;;;;;;;2735:168::o;1821:26:26:-;;;-1:-1:-1;;;;;1821:26:26;;:::o;10138:987::-;544:8:2;;10284:7:26;;544:8:2;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2514:4:26;;10266:7;;-1:-1:-1;;;;;2488:31:26;;;2514:4;;2488:31;2480:66;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;;;;10325:6;;;;;;;;;-1:-1:-1;;;;;10325:6:26;-1:-1:-1;;;;;10325:18:26;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10325:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10325:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10325:20:26;10303:76;;;-1:-1:-1;;;10303:76:26;;10357:10;10303:76;;;;;;;;;;;;-1:-1:-1;;;;;10303:53:26;;;;;;:76;;;;;-1:-1:-1;;10303:76:26;;;;;;;;-1:-1:-1;10303:53:26;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;10303:76:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;10418:12:26;;10466:11;;10418:155;;;-1:-1:-1;;;10418:155:26;;-1:-1:-1;;;;;10466:11:26;;;10418:155;;;;10491:4;10418:155;;;;10509:10;10418:155;;;;;;;;;;;;;;;;;;;10389:26;;-1:-1:-1;10418:12:26;;;;;-1:-1:-1;10418:34:26;;:155;;;;;;;;;;;;;;;:12;:155;;;5:2:-1;;;;30:1;27;20:12;5:2;10418:155:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10418:155:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10418:155:26;10605:11;;:118;;;-1:-1:-1;;;10605:118:26;;-1:-1:-1;;;;;10605:118:26;;;;;;;;;;;;;;;;;;;;;10418:155;;-1:-1:-1;10583:19:26;;10605:11;;;;;:32;;:118;;;;;10418:155;;10605:118;;;;;;;10583:19;10605:11;:118;;;5:2:-1;;;;30:1;27;20:12;5:2;10605:118:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10605:118:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10605:118:26;;-1:-1:-1;10741:25:26;;;;10733:78;;;;-1:-1:-1;;;10733:78:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10829:41;;;-1:-1:-1;;;10829:41:26;;10846:10;10829:41;;;;;;;;;;;;-1:-1:-1;;;;;10829:16:26;;;;;:41;;;;;;;;;;;;;;-1:-1:-1;10829:16:26;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;10829:41:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10829:41:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10829:41:26;:49;;10874:4;10829:49;10821:77;;;;;-1:-1:-1;;;10821:77:26;;;;;;;;;;;;-1:-1:-1;;;10821:77:26;;;;;;;;;;;;;;;10913:177;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10913:177:26;;;10936:10;;10913:177;;;;;;;;;11107:11;10138:987;-1:-1:-1;;;;;;10138:987:26:o;1347:137:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:77;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:77;;;1347:137::o;659:77::-;697:7;723:6;-1:-1:-1;;;;;723:6:77;659:77;:::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:77;1042:10;:20;;979:90::o;1532:18:26:-;;;-1:-1:-1;;;;;1532:18:26;;:::o;8414:929::-;544:8:2;;8564:7:26;;544:8:2;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2514:4:26;;8545:8;;-1:-1:-1;;;;;2488:31:26;;;2514:4;;2488:31;2480:66;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;;;;8604:45;;;-1:-1:-1;;;8604:45:26;;8623:10;8604:45;;;;8643:4;8604:45;;;;;;8653:12;;-1:-1:-1;;;;;8604:18:26;;;;;:45;;;;;;;;;;;;;;;:18;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;8604:45:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8604:45:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8604:45:26;:61;;8583:147;;;;-1:-1:-1;;;8583:147:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8761:62;;;-1:-1:-1;;;8761:62:26;;8783:10;8761:62;;;;8803:4;8761:62;;;;;;;;;;;;-1:-1:-1;;;;;8761:21:26;;;;;:62;;;;;;;;;;;;;;-1:-1:-1;8761:21:26;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;8761:62:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8761:62:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8761:62:26;:70;;8827:4;8761:70;8740:174;;;;-1:-1:-1;;;8740:174:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8943:11;;:39;;;-1:-1:-1;;;8943:39:26;;-1:-1:-1;;;;;8943:39:26;;;;;;;;;;;;;;;8924:16;;8943:11;;;;;:15;;:39;;;;;;;;;;;;;;;8924:16;8943:11;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;8943:39:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8943:39:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8943:39:26;;-1:-1:-1;9000:22:26;;;;8992:72;;;;-1:-1:-1;;;8992:72:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:6;;;;;;;;;-1:-1:-1;;;;;9096:6:26;-1:-1:-1;;;;;9096:18:26;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9096:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9096:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9096:20:26;9074:71;;;-1:-1:-1;;;9074:71:26;;9124:10;9074:71;;;;;;;;;;;;-1:-1:-1;;;;;9074:49:26;;;;;;:71;;;;;9096:20;;9074:71;;;;;;;;-1:-1:-1;9074:49:26;:71;;;5:2:-1;;;;30:1;27;20:12;5:2;9074:71:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9074:71:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;9160:151:26;;;;;;9074:71;9160:151;;;;;;;;;;;;;-1:-1:-1;;;;;9160:151:26;;;9188:10;;9160:151;;;;;;;;;9328:8;8414:929;-1:-1:-1;;;;;8414:929:26:o;12358:1327::-;544:8:2;;12589:7:26;;;;544:8:2;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2514:4:26;;12532:14;;-1:-1:-1;;;;;2488:31:26;;;2514:4;;2488:31;2480:66;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;-1:-1:-1;;;2480:66:26;;;;;;;;;;;;;;;2362:11;;-1:-1:-1;;;;;2362:11:26;2348:10;:25;2340:75;;;;-1:-1:-1;;;2340:75:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12629:9;:7;:9::i;:::-;12621:56;;;;-1:-1:-1;;;12621:56:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12687:13;12703:28;12716:14;12703:12;:28::i;:::-;12768:11;;:53;;;-1:-1:-1;;;12768:53:26;;-1:-1:-1;;;;;12768:53:26;;;;;;;;;;;;;;;12687:44;;-1:-1:-1;12741:24:26;;12768:11;;;;;:24;;:53;;;;;;;;;;;;;;12741:24;12768:11;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;12768:53:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12768:53:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12768:53:26;12874:6;;:20;;;-1:-1:-1;;;12874:20:26;;;;12768:53;;-1:-1:-1;12831:21:26;;12874:6;;;;-1:-1:-1;;;;;12874:6:26;;:18;;:20;;;;;12768:53;;12874:20;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;12874:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12874:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12874:20:26;12954:21;;;-1:-1:-1;;;12954:21:26;;;;12874:20;;-1:-1:-1;12906:21:26;;12930:47;;-1:-1:-1;;;;;12954:19:26;;;;;:21;;;;;12874:20;;12954:21;;;;;;;;:19;:21;;;5:2:-1;;;;30:1;27;20:12;5:2;12954:21:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12954:21:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12954:21:26;12938:2;;12930:47;:15;:47;:::i;:::-;12906:71;;12987:18;13008:45;13039:13;13035:2;:17;13008:22;13013:9;13024:5;13008:4;:22::i;:::-;:26;:45;:26;:45;:::i;:::-;13091:11;;:41;;;-1:-1:-1;;;13091:41:26;;-1:-1:-1;;;;;13091:41:26;;;;;;;;;12987:66;;-1:-1:-1;13063:25:26;;13091:11;;;;;:25;;:41;;;;;;;;;;;;;;13063:25;13091:11;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;13091:41:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13091:41:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13091:41:26;;-1:-1:-1;13142:13:26;13158:32;:16;13179:10;13158:32;:20;:32;:::i;:::-;13142:48;-1:-1:-1;13208:28:26;13142:48;13218:17;13208:28;:9;:28;:::i;:::-;13200:36;-1:-1:-1;13246:14:26;13263:21;13200:36;13273:10;13263:21;:9;:21;:::i;:::-;13246:38;;13316:6;;;;;;;;;-1:-1:-1;;;;;13316:6:26;-1:-1:-1;;;;;13316:18:26;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13316:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13316:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13316:20:26;13344:11;;13294:70;;;-1:-1:-1;;;13294:70:26;;-1:-1:-1;;;;;13344:11:26;;;13294:70;;;;;;;;;;;;:49;;;;;;;:70;;;;;13316:20;;13294:70;;;;;;;13344:11;13294:49;:70;;;5:2:-1;;;;30:1;27;20:12;5:2;13294:70:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13294:70:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;13404:13:26;;13387:31;;:12;;:31;:16;:31;:::i;:::-;13374:10;:44;;;;13488:14;-1:-1:-1;;;;;13433:209:26;13456:10;;13433:209;13517:11;13542:16;13572:17;13603:10;13627:5;13433:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13660:10:26;;;;-1:-1:-1;12358:1327:26;;-1:-1:-1;;;;;;;;;;12358:1327:26:o;7189:115::-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;7267:13:26;:30;7189:115::o;2113:25::-;;;;:::o;6216:341::-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;;;;6265:11:26;:9;:11::i;:::-;6343:10;;6387:6;;:20;;;-1:-1:-1;;;6387:20:26;;;;-1:-1:-1;;;;;6343:10:26;;;;:22;;:10;6387:6;;;;:18;;:20;;;;;;;;;;;;;;:6;:20;;;5:2:-1;;;;30:1;27;20:12;5:2;6387:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6387:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6387:20:26;6422:60;;;6476:4;6422:60;;;;;;;;;;26:21:-1;;;22:32;;6:49;;6422:60:26;;;;;;6387:20;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;6496:6:26;;6343:184;;;;;;-1:-1:-1;;;;;;6343:184:26;;;-1:-1:-1;;;;;6343:184:26;;;;;;;;;6496:6;;;;;6343:184;;;;;;-1:-1:-1;6343:184:26;;;;;;;;;;;;;;;;;;;;;6422:60;;-1:-1:-1;;6343:184:26;;;;;;;;;25:18:-1;6343:184:26;;25:18:-1;-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6343:184:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6343:184:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6343:184:26;;;;;;39:16:-1;36:1;17:17;2:54;101:4;6343:184:26;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;6343:184:26;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;6343:184:26;;420:4:-1;411:14;;;;6343:184:26;;;;;411:14:-1;6343:184:26;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6343:184:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6537:13;:11;:13::i;:::-;6216:341::o;11661:114::-;11701:4;11758:10;;11724:31;11741:13;;11724:12;:16;;:31;;;;:::i;:::-;:44;11717:51;;11661:114;:::o;2235:262:7:-;2318:6;;2294:4;;-1:-1:-1;;;;;2318:6:7;2310:49;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;-1:-1:-1;;;2310:49:7;;;;;;;;;;;;;;;2376:10;;;2422:6;2376:54;;;-1:-1:-1;;;2376:54:7;;-1:-1:-1;;;;;2376:54:7;;;;;;;2422:6;;;2376:54;;;;;;:10;;;;;:29;;:54;;;;;;;;;;;;;;:10;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;2376:54:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2376:54:7;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2376:54:7;2370:100;;-1:-1:-1;2454:5:7;2447:12;;2370:100;-1:-1:-1;2486:4:7;2235:262;;;;:::o;1994:28:26:-;;;;:::o;11307:122::-;11390:11;;:32;;;-1:-1:-1;;;11390:32:26;;-1:-1:-1;;;;;11390:32:26;;;;;;;;;11364:7;;11390:11;;;;;:24;;:32;;;;;;;;;;;;;;;:11;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;11390:32:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11390:32:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11390:32:26;;11307:122;-1:-1:-1;;11307:122:26:o;211:26:2:-;;;;:::o;14010:643:26:-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;14145:4:26;;:29;;;-1:-1:-1;;;14145:29:26;;14168:4;14145:29;;;;;;14118:24;;-1:-1:-1;;;;;14145:4:26;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;14145:29:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14145:29:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14145:29:26;;-1:-1:-1;14188:20:26;;14184:178;;14249:4;;14271:6;;14249:48;;;-1:-1:-1;;;14249:48:26;;:4;14271:6;;;-1:-1:-1;;;;;14271:6:26;;;14249:48;;;;;;;;;;;;:4;;;:13;;:48;;;;;;;;;;;;;;;:4;;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;14249:48:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14249:48:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14249:48:26;14224:127;;;;;-1:-1:-1;;;14224:127:26;;;;;;;;;;;;-1:-1:-1;;;14224:127:26;;;;;;;;;;;;;;;14379:4;;:29;;;-1:-1:-1;;;14379:29:26;;14402:4;14379:29;;;;;;-1:-1:-1;;;;;14379:4:26;;;;:14;;:29;;;;;;;;;;;;;;;:4;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;14379:29:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14379:29:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14379:29:26;:34;14371:72;;;;;-1:-1:-1;;;14371:72:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;14453:21;14496:6;;;;;;;;;-1:-1:-1;;;;;14496:6:26;-1:-1:-1;;;;;14496:18:26;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14496:20:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14496:20:26;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14496:20:26;14528:11;;14566:6;;14528:46;;;-1:-1:-1;;;14528:46:26;;-1:-1:-1;;;;;14528:11:26;14566:6;;;;;14528:46;;;;;;14496:20;;-1:-1:-1;14528:11:26;;;:29;;:46;;;;;-1:-1:-1;;14528:46:26;;;;;;;;-1:-1:-1;14528:11:26;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;14528:46:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14528:46:26;;;;14584:10;-1:-1:-1;;;;;14584:25:26;;:27;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14584:27:26;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14639:6:26;;14621:25;;-1:-1:-1;14639:6:26;;;-1:-1:-1;;;;;14639:6:26;;-1:-1:-1;14621:17:26;:25::i;:::-;1000:1:7;;14010:643:26:o;1655:107:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;1483:16:26:-;;;-1:-1:-1;;;;;1483:16:26;;:::o;6697:124::-;932:6:7;;-1:-1:-1;;;;;932:6:7;943:10;924:29;916:74;;;;;-1:-1:-1;;;916:74:7;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;916:74:7;;;;;;;;;;;;;;;6771:11:26;:43;;-1:-1:-1;;;;;;6771:43:26;-1:-1:-1;;;;;6771:43:26;;;;;;;;;;6697:124::o;1205:145:76:-;1263:7;1295:1;1290;:6;;1282:15;;;;;;-1:-1:-1;1319:5:76;;;1205:145;;;;;:::o;2069:118:0:-;2128:9;2179:1;2153:23;2157:11;2161:1;1683:6;2157:3;:11::i;:::-;2174:1;2170;:5;2153:3;:23::i;:::-;:27;;;;;;;2069:118;-1:-1:-1;;;2069:118:0:o;778:296:76:-;836:7;933:1;929;:5;921:14;;;;;;945:9;961:1;957;:5;;;;;;;778:296;-1:-1:-1;;;;778:296:76:o;1431:145::-;1489:7;1520:5;;;1543:6;;;;1535:15;;;;;;1568:1;1431:145;-1:-1:-1;;;1431:145:76:o;786:280:5:-;1121:14:7;:12;:14::i;:::-;1113:51;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;-1:-1:-1;;;1113:51:7;;;;;;;;;;;;;;;841:10:5;;885:8;;908:62;;;964:4;908:62;;;;;;;;;;26:21:-1;;;22:32;;6:49;;908:62:5;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;841:10:5;984:6;841:174;;-1:-1:-1;;;841:174:5;;-1:-1:-1;;;;;885:8:5;;;841:174;;;;;;984:6;;;841:174;;;;;;:10;:174;;;;;;;;;;;;;;;;;;;;;:10;;;;;:22;;885:8;;908:62;;984:6;841:10;;:174;;;;;;;;25:18:-1;841:10:5;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;841:174:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;841:174:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;841:174:5;;;;;;39:16:-1;36:1;17:17;2:54;101:4;841:174:5;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;;;5:11;;2:2;;;29:1;26;19:12;2:2;841:174:5;;;;;;;;;;;;;;;;;;;19:11:-1;11:20;;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;841:174:5;;420:4:-1;411:14;;;;841:174:5;;;;;411:14:-1;841:174:5;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;841:174:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;841:174:5;;-1:-1:-1;;1051:6:5;;1025:34;;-1:-1:-1;;;;;;1051:6:5;;-1:-1:-1;1025:17:5;;-1:-1:-1;1025:34:5:i;2010:134:2:-;918:11;;911:3;:18;;:37;;;;;939:9;;933:3;:15;911:37;903:63;;;;;-1:-1:-1;;;903:63:2;;;;;;;;;;;;-1:-1:-1;;;903:63:2;;;;;;;;;;;;;;;708:8;;;;707:9;699:40;;;;;-1:-1:-1;;;699:40:2;;;;;;;;;;;;-1:-1:-1;;;699:40:2;;;;;;;;;;;;;;;2077:8;:15;;-1:-1:-1;;2077:15:2;2088:4;2077:15;;;2107:30;;;2133:3;2107:30;;;;2121:10;;2107:30;;;;;;;;;;2010:134::o;2725:176::-;544:8;;;;536:34;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;-1:-1:-1;;;536:34:2;;;;;;;;;;;;;;;2795:8;:16;;-1:-1:-1;;2795:16:2;;;2826:28;;;2850:3;2826:28;;;;2838:10;;2826:28;;;;;;;;;;2885:7;-1:-1:-1;;;;;2864:30:2;;1906:183:77;-1:-1:-1;;;;;1979:22:77;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:77;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:77;-1:-1:-1;;;;;2065:17:77;;;;;;;;;;1906:183::o;1025:149:0:-;1083:9;1112:6;;;:30;;-1:-1:-1;;1127:5:0;;;1141:1;1136;1127:5;1136:1;1122:15;;;;;:20;1112:30;1104:63;;;;;-1:-1:-1;;;1104:63:0;;;;;;;;;;;;-1:-1:-1;;;1104:63:0;;;;;;;;;;;;;;744:135;836:5;;;831:16;;;;823:49;;;;;-1:-1:-1;;;823:49:0;;;;;;;;;;;;-1:-1:-1;;;823:49:0;;;;;;;;;;;;;",
  "source": "pragma solidity >0.5.4;\n\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol\";\nimport \"@daostack/arc/contracts/controller/Avatar.sol\";\nimport \"../../contracts/dao/schemes/FeelessScheme.sol\";\nimport \"../../contracts/dao/schemes/ActivePeriod.sol\";\nimport \"../../contracts/DSMath.sol\";\nimport \"../../contracts/token/GoodDollar.sol\";\nimport \"./GoodMarketMaker.sol\";\n\ninterface cERC20 {\n    function mint(uint256 mintAmount) external returns (uint256);\n\n    function redeemUnderlying(uint256 mintAmount) external returns (uint256);\n\n    function exchangeRateCurrent() external returns (uint256);\n\n    function exchangeRateStored() external view returns (uint256);\n\n    function balanceOf(address addr) external view returns (uint256);\n\n    function transfer(address to, uint256 amount) external returns (bool);\n}\n\ninterface ContributionCalc {\n    function calculateContribution(\n        GoodMarketMaker _marketMaker,\n        GoodReserveCDai _reserve,\n        address _contributer,\n        ERC20 _token,\n        uint256 _gdAmount\n    ) external view returns (uint256);\n}\n\n/**\n@title Reserve based on cDAI and dynamic reserve ratio market maker\n*/\ncontract GoodReserveCDai is DSMath, FeelessScheme, ActivePeriod {\n    using SafeMath for uint256;\n\n    // DAI token address\n    ERC20 public dai;\n\n    // cDAI token address\n    cERC20 public cDai;\n\n    // The address of the market maker contract\n    // which makes the calculations and holds\n    // the token and accounts info\n    GoodMarketMaker public marketMaker;\n\n    // The fund manager receives the minted tokens\n    // when executing `mintInterestAndUBI`\n    address public fundManager;\n\n    // The block interval defines the number of\n    // blocks that shall be passed before the\n    // next execution of `mintInterestAndUBI`\n    uint256 public blockInterval;\n\n    // The last block number which\n    // `mintInterestAndUBI` has been executed in\n    uint256 public lastMinted;\n\n    // The contribution contract is responsible\n    // for calculates the contribution amount\n    // when selling GD\n    ContributionCalc public contribution;\n\n    modifier onlyFundManager {\n        require(msg.sender == fundManager, \"Only FundManager can call this method\");\n        _;\n    }\n\n    modifier onlyCDai(ERC20 token) {\n        require(address(token) == address(cDai), \"Only cDAI is supported\");\n        _;\n    }\n\n    // Emits when GD tokens are purchased\n    event TokenPurchased(\n        // The initiate of the action\n        address indexed caller,\n        // The convertible token address\n        // which the GD tokens were\n        // purchased with\n        address indexed reserveToken,\n        // Reserve tokens amount\n        uint256 reserveAmount,\n        // Minimal GD return that was\n        // permitted by the caller\n        uint256 minReturn,\n        // Actual return after the\n        // conversion\n        uint256 actualReturn\n    );\n\n    // Emits when GD tokens are sold\n    event TokenSold(\n        // The initiate of the action\n        address indexed caller,\n        // The convertible token address\n        // which the GD tokens were\n        // sold to\n        address indexed reserveToken,\n        // GD tokens amount\n        uint256 gdAmount,\n        // The amount of GD tokens that\n        // was contributed during the\n        // conversion\n        uint256 contributionAmount,\n        // Minimal reserve tokens return\n        // that was permitted by the caller\n        uint256 minReturn,\n        // Actual return after the\n        // conversion\n        uint256 actualReturn\n    );\n\n    // Emits when the contribution contract\n    // address is updated\n    event ContributionAddressUpdated(\n        // The initiate of the action\n        address indexed caller,\n        // Previous contribution\n        // contract address\n        address prevAddress,\n        // The updated contribution\n        // contract address\n        address newAddress\n    );\n\n    // Emits when new GD tokens minted\n    event UBIMinted(\n        //epoch of UBI\n        uint256 indexed day,\n        //the token paid as interest\n        address indexed interestToken,\n        //wei amount of interest paid in interestToken\n        uint256 interestReceived,\n        // Amount of GD tokens that was\n        // added to the supply as a result\n        // of `mintInterest`\n        uint256 gdInterestMinted,\n        // Amount of GD tokens that was\n        // added to the supply as a result\n        // of `mintExpansion`\n        uint256 gdExpansionMinted,\n        // Amount of GD tokens that was\n        // minted to the `interestCollector`\n        uint256 gdInterestTransferred,\n        // Amount of GD tokens that was\n        // minted to the `ubiCollector`\n        uint256 gdUbiTransferred\n    );\n\n    /**\n     * @dev Constructor\n     * @param _dai The address of DAI\n     * @param _cDai The address of cDAI\n     * @param _fundManager The address of the fund manager contract\n     * @param _avatar The avatar of the DAO\n     * @param _identity The identity contract\n     * @param _marketMaker The address of the market maker contract\n     * @param _contribution The address of the contribution contract\n     * @param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`\n     */\n    constructor(\n        ERC20 _dai,\n        cERC20 _cDai,\n        address _fundManager,\n        Avatar _avatar,\n        Identity _identity,\n        address _marketMaker,\n        ContributionCalc _contribution,\n        uint256 _blockInterval\n    ) public FeelessScheme(_identity, _avatar) ActivePeriod(now, now * 2, _avatar) {\n        dai = _dai;\n        cDai = _cDai;\n        fundManager = _fundManager;\n        marketMaker = GoodMarketMaker(_marketMaker);\n        blockInterval = _blockInterval;\n        lastMinted = block.number.div(blockInterval);\n        contribution = _contribution;\n    }\n\n    /**\n     * @dev Start function. Adds this contract to identity as a feeless scheme.\n     * Can only be called if scheme is registered\n     */\n    function start() public onlyRegistered {\n        addRights();\n\n        // Adds the reserve as a minter of the GD token\n        controller.genericCall(\n            address(avatar.nativeToken()),\n            abi.encodeWithSignature(\"addMinter(address)\", address(this)),\n            avatar,\n            0\n        );\n        super.start();\n    }\n\n    /**\n     * @dev Allows the DAO to change the market maker contract\n     * @param _marketMaker address of the new contract\n     */\n    function setMarketMaker(address _marketMaker) public onlyAvatar {\n        marketMaker = GoodMarketMaker(_marketMaker);\n    }\n\n    /**\n     * @dev Allows the DAO to change the fund manager contract\n     * @param _fundManager address of the new contract\n     */\n    function setFundManager(address _fundManager) public onlyAvatar {\n        fundManager = _fundManager;\n    }\n\n    /**\n     * @dev Allows the DAO to change the block interval\n     * @param _blockInterval the new value\n     */\n    function setBlockInterval(uint256 _blockInterval) public onlyAvatar {\n        blockInterval = _blockInterval;\n    }\n\n    /**\n     * @dev Allows the DAO to change the contribution formula contract\n     * @param _contribution address of the new contribution contract\n     */\n    function setContributionAddress(address _contribution) public onlyAvatar {\n        address prevAddress = address(contribution);\n        contribution = ContributionCalc(_contribution);\n        emit ContributionAddressUpdated(msg.sender, prevAddress, _contribution);\n    }\n\n    /**\n     * @dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n     * `buy` occurs only if the GD return is above the given minimum. It is possible\n     * to buy only with cDAI and when the contract is set to active. MUST call to\n     * `buyWith` `approve` prior this action to allow this contract to accomplish the\n     * conversion.\n     * @param _buyWith The tokens that should be converted to GD tokens\n     * @param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n     * @param _minReturn The minimum allowed return in GD tokens\n     * @return (gdReturn) How much GD tokens were transferred\n     */\n    function buy(\n        ERC20 _buyWith,\n        uint256 _tokenAmount,\n        uint256 _minReturn\n    ) public requireActive onlyCDai(_buyWith) returns (uint256) {\n        require(\n            _buyWith.allowance(msg.sender, address(this)) >= _tokenAmount,\n            \"You need to approve cDAI transfer first\"\n        );\n        require(\n            _buyWith.transferFrom(msg.sender, address(this), _tokenAmount) == true,\n            \"transferFrom failed, make sure you approved cDAI transfer\"\n        );\n        uint256 gdReturn = marketMaker.buy(_buyWith, _tokenAmount);\n        require(gdReturn >= _minReturn, \"GD return must be above the minReturn\");\n        ERC20Mintable(address(avatar.nativeToken())).mint(msg.sender, gdReturn);\n        emit TokenPurchased(\n            msg.sender,\n            address(_buyWith),\n            _tokenAmount,\n            _minReturn,\n            gdReturn\n        );\n        return gdReturn;\n    }\n\n    /**\n     * @dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n     * `sell` occurs only if the token return is above the given minimum. Notice that\n     * there is a contribution amount from the given GD that remains in the reserve.\n     * It is only possible to sell to cDAI and only when the contract is set to\n     * active. MUST be called to G$ `approve` prior to this action to allow this\n     * contract to accomplish the conversion.\n     * @param _sellTo The tokens that will be received after the conversion\n     * @param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n     * @param _minReturn The minimum allowed `sellTo` tokens return\n     * @return (tokenReturn) How much `sellTo` tokens were transferred\n     */\n    function sell(\n        ERC20 _sellTo,\n        uint256 _gdAmount,\n        uint256 _minReturn\n    ) public requireActive onlyCDai(_sellTo) returns (uint256) {\n        ERC20Burnable(address(avatar.nativeToken())).burnFrom(msg.sender, _gdAmount);\n        uint256 contributionAmount = contribution.calculateContribution(\n            marketMaker,\n            this,\n            msg.sender,\n            _sellTo,\n            _gdAmount\n        );\n        uint256 tokenReturn = marketMaker.sellWithContribution(\n            _sellTo,\n            _gdAmount,\n            contributionAmount\n        );\n        require(tokenReturn >= _minReturn, \"Token return must be above the minReturn\");\n        require(_sellTo.transfer(msg.sender, tokenReturn) == true, \"Transfer failed\");\n        emit TokenSold(\n            msg.sender,\n            address(_sellTo),\n            _gdAmount,\n            contributionAmount,\n            _minReturn,\n            tokenReturn\n        );\n        return tokenReturn;\n    }\n\n    /**\n     * @dev Current price of GD in `token`. currently only cDAI is supported.\n     * @param _token The desired reserve token to have\n     * @return price of GD\n     */\n    function currentPrice(ERC20 _token) public view returns (uint256) {\n        return marketMaker.currentPrice(_token);\n    }\n\n    /**\n     * @dev Checks if enough blocks have passed so it would be possible to\n     * execute `mintInterestAndUBI` according to the length of `blockInterval`\n     * @return (bool) True if enough blocks have passed\n     */\n    function canMint() public view returns (bool) {\n        return block.number.div(blockInterval) > lastMinted;\n    }\n\n    /**\n     * @dev Anyone can call this to trigger calculations.\n     * Reserve sends UBI to Avatar DAO and returns interest to FundManager.\n     * @param _interestToken The token that was transfered to the reserve\n     * @param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n     * @param _interest Out of total transfered how much is the interest (in `_interestToken`)\n     * that needs to be paid back (some interest might be donated)\n     * @return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted\n     */\n    function mintInterestAndUBI(\n        ERC20 _interestToken,\n        uint256 _transfered,\n        uint256 _interest\n    )\n        public\n        requireActive\n        onlyCDai(_interestToken)\n        onlyFundManager\n        returns (uint256, uint256)\n    {\n        require(canMint(), \"Need to wait for the next interval\");\n        uint256 price = currentPrice(_interestToken);\n        uint256 gdInterestToMint = marketMaker.mintInterest(_interestToken, _transfered);\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        uint256 precisionLoss = uint256(27).sub(uint256(gooddollar.decimals()));\n        uint256 gdInterest = rdiv(_interest, price).div(10**precisionLoss);\n        uint256 gdExpansionToMint = marketMaker.mintExpansion(_interestToken);\n        uint256 gdUBI = gdInterestToMint.sub(gdInterest);\n        gdUBI = gdUBI.add(gdExpansionToMint);\n        uint256 toMint = gdUBI.add(gdInterest);\n        ERC20Mintable(address(avatar.nativeToken())).mint(fundManager, toMint);\n        lastMinted = block.number.div(blockInterval);\n        emit UBIMinted(\n            lastMinted,\n            address(_interestToken),\n            _transfered,\n            gdInterestToMint,\n            gdExpansionToMint,\n            gdInterest,\n            gdUBI\n        );\n        return (gdInterest, gdUBI);\n    }\n\n    /**\n     * @dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\n     * and has transferred the market maker ownership to `_avatar`. Inactive means that\n     * buy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\n     * executes this method\n     */\n    function end() public onlyAvatar {\n        // remaining cDAI tokens in the current reserve contract\n        uint256 remainingReserve = cDai.balanceOf(address(this));\n        if (remainingReserve > 0) {\n            require(\n                cDai.transfer(address(avatar), remainingReserve),\n                \"cdai transfer failed\"\n            );\n        }\n        require(cDai.balanceOf(address(this)) == 0, \"Funds transfer has failed\");\n        GoodDollar gooddollar = GoodDollar(address(avatar.nativeToken()));\n        marketMaker.transferOwnership(address(avatar));\n        gooddollar.renounceMinter();\n        super.internalEnd(avatar);\n    }\n\n    /**\n     * @dev method to recover any stuck erc20 tokens (ie compound COMP)\n     * @param _token the ERC20 token to recover\n     */\n    function recover(ERC20 _token) public onlyAvatar {\n        require(\n            _token.transfer(address(avatar), _token.balanceOf(address(this))),\n            \"recover transfer failed\"\n        );\n    }\n}\n",
  "sourcePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
  "ast": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
    "exportedSymbols": {
      "ContributionCalc": [
        8343
      ],
      "GoodReserveCDai": [
        9043
      ],
      "cERC20": [
        8327
      ]
    },
    "id": 9044,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8276,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 8277,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21309,
        "src": "25:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 8278,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21850,
        "src": "85:63:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "id": 8279,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21967,
        "src": "149:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "id": 8280,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21881,
        "src": "221:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 8281,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 12706,
        "src": "293:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 8282,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1228,
        "src": "349:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 8283,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1005,
        "src": "405:54:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 8284,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 304,
        "src": "460:36:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 8285,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 3768,
        "src": "497:46:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
        "file": "./GoodMarketMaker.sol",
        "id": 8286,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 8275,
        "src": "544:31:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8327,
        "linearizedBaseContracts": [
          8327
        ],
        "name": "cERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8293,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8288,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "614:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "613:20:26"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "652:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "652:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "651:9:26"
            },
            "scope": 8327,
            "src": "600:61:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8300,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8295,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "693:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "692:20:26"
            },
            "returnParameters": {
              "id": 8299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "731:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:9:26"
            },
            "scope": 8327,
            "src": "667:73:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8305,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "774:2:26"
            },
            "returnParameters": {
              "id": 8304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8305,
                  "src": "795:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "795:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "794:9:26"
            },
            "scope": 8327,
            "src": "746:58:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8310,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "837:2:26"
            },
            "returnParameters": {
              "id": 8309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8310,
                  "src": "863:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:9:26"
            },
            "scope": 8327,
            "src": "810:62:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8317,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8312,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "897:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8311,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "896:14:26"
            },
            "returnParameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "934:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "933:9:26"
            },
            "scope": 8327,
            "src": "878:65:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8326,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8319,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "967:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "967:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "979:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "966:28:26"
            },
            "returnParameters": {
              "id": 8325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "1013:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1013:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1012:6:26"
            },
            "scope": 8327,
            "src": "949:70:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "577:444:26"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8343,
        "linearizedBaseContracts": [
          8343
        ],
        "name": "ContributionCalc",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8342,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "calculateContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8329,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1096:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                    "typeString": "contract GoodMarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8328,
                    "name": "GoodMarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8274,
                    "src": "1096:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8331,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1134:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8330,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "1134:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8333,
                  "name": "_contributer",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1168:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1168:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8335,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1198:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8334,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "1198:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8337,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1220:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1086:157:26"
            },
            "returnParameters": {
              "id": 8341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8340,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1267:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1267:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1266:9:26"
            },
            "scope": 8343,
            "src": "1056:220:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "1023:255:26"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8344,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "1383:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 8345,
            "nodeType": "InheritanceSpecifier",
            "src": "1383:6:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8346,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "1391:13:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 8347,
            "nodeType": "InheritanceSpecifier",
            "src": "1391:13:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8348,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "1406:12:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 8349,
            "nodeType": "InheritanceSpecifier",
            "src": "1406:12:26"
          }
        ],
        "contractDependencies": [
          303,
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Reserve based on cDAI and dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 9043,
        "linearizedBaseContracts": [
          9043,
          1004,
          1227,
          2667,
          1423,
          21417,
          303
        ],
        "name": "GoodReserveCDai",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8352,
            "libraryName": {
              "contractScope": null,
              "id": 8350,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "1431:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1425:27:26",
            "typeName": {
              "id": 8351,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1444:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 8354,
            "name": "dai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1483:16:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8353,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "1483:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8356,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1532:18:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$8327",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8355,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8327,
              "src": "1532:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$8327",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8358,
            "name": "marketMaker",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1686:34:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
              "typeString": "contract GoodMarketMaker"
            },
            "typeName": {
              "contractScope": null,
              "id": 8357,
              "name": "GoodMarketMaker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8274,
              "src": "1686:15:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                "typeString": "contract GoodMarketMaker"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8360,
            "name": "fundManager",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1821:26:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8359,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1821:7:26",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8362,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1994:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8361,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1994:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8364,
            "name": "lastMinted",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2113:25:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8363,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2113:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8366,
            "name": "contribution",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2262:36:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ContributionCalc_$8343",
              "typeString": "contract ContributionCalc"
            },
            "typeName": {
              "contractScope": null,
              "id": 8365,
              "name": "ContributionCalc",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8343,
              "src": "2262:16:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                "typeString": "contract ContributionCalc"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8377,
              "nodeType": "Block",
              "src": "2330:103:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "2348:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2348:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "fundManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8360,
                          "src": "2362:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2348:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64",
                        "id": 8373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2375:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        },
                        "value": "Only FundManager can call this method"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        }
                      ],
                      "id": 8368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2340:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2340:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8375,
                  "nodeType": "ExpressionStatement",
                  "src": "2340:75:26"
                },
                {
                  "id": 8376,
                  "nodeType": "PlaceholderStatement",
                  "src": "2425:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8378,
            "name": "onlyFundManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2330:0:26"
            },
            "src": "2305:128:26",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8394,
              "nodeType": "Block",
              "src": "2470:94:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8384,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8380,
                              "src": "2496:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 8383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2488:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2488:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8387,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "2514:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            ],
                            "id": 8386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2506:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2506:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2488:31:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206344414920697320737570706f72746564",
                        "id": 8390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2521:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        },
                        "value": "Only cDAI is supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        }
                      ],
                      "id": 8382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2480:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2480:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8392,
                  "nodeType": "ExpressionStatement",
                  "src": "2480:66:26"
                },
                {
                  "id": 8393,
                  "nodeType": "PlaceholderStatement",
                  "src": "2556:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8395,
            "name": "onlyCDai",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8380,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8395,
                  "src": "2457:11:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8379,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "2457:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:13:26"
            },
            "src": "2439:125:26",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8407,
            "name": "TokenPurchased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8397,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2680:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2680:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8399,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2815:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8398,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2815:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8401,
                  "indexed": false,
                  "name": "reserveAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2886:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8403,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2990:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8405,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "3074:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2632:468:26"
            },
            "src": "2612:489:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8421,
            "name": "TokenSold",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8409,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3207:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3207:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8411,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3335:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3335:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8413,
                  "indexed": false,
                  "name": "gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3401:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8415,
                  "indexed": false,
                  "name": "contributionAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3527:26:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3527:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8417,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3648:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8416,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8419,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3732:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3159:599:26"
            },
            "src": "3144:615:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8429,
            "name": "ContributionAddressUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "3915:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3915:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "indexed": false,
                  "name": "prevAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4008:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8427,
                  "indexed": false,
                  "name": "newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4101:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4101:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3867:258:26"
            },
            "src": "3835:291:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8445,
            "name": "UBIMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8431,
                  "indexed": true,
                  "name": "day",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4219:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4219:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8433,
                  "indexed": true,
                  "name": "interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4285:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4285:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8435,
                  "indexed": false,
                  "name": "interestReceived",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4379:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4379:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8437,
                  "indexed": false,
                  "name": "gdInterestMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4525:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "indexed": false,
                  "name": "gdExpansionMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4672:25:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4672:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "indexed": false,
                  "name": "gdInterestTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4792:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "indexed": false,
                  "name": "gdUbiTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4911:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4186:755:26"
            },
            "src": "4171:771:26"
          },
          {
            "body": {
              "id": 8509,
              "nodeType": "Block",
              "src": "5794:270:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8475,
                      "name": "dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8354,
                      "src": "5804:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8476,
                      "name": "_dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8447,
                      "src": "5810:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "5804:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 8478,
                  "nodeType": "ExpressionStatement",
                  "src": "5804:10:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8479,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8356,
                      "src": "5824:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8480,
                      "name": "_cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "5831:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "5824:12:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 8482,
                  "nodeType": "ExpressionStatement",
                  "src": "5824:12:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8483,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "5846:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8484,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "5860:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5846:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8486,
                  "nodeType": "ExpressionStatement",
                  "src": "5846:26:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8487,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "5882:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8489,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8457,
                          "src": "5912:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8488,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "5896:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5896:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "5882:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8492,
                  "nodeType": "ExpressionStatement",
                  "src": "5882:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8493,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "5935:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8494,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8461,
                      "src": "5951:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5935:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8496,
                  "nodeType": "ExpressionStatement",
                  "src": "5935:30:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8497,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "5975:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8501,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "6005:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8498,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5988:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5988:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5988:16:26",
                        "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": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5988:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5975:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8504,
                  "nodeType": "ExpressionStatement",
                  "src": "5975:44:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8505,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "6029:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8506,
                      "name": "_contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8459,
                      "src": "6044:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "6029:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "6029:28:26"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _dai The address of DAI\n@param _cDai The address of cDAI\n@param _fundManager The address of the fund manager contract\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _marketMaker The address of the market maker contract\n@param _contribution The address of the contribution contract\n@param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`",
            "id": 8510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8464,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8455,
                    "src": "5738:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8465,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5749:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "5724:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5724:33:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8468,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "5771:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8469,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "5776:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 8470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5782:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "5776:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8472,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5785:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8473,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8467,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "5758:12:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5758:35:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5494:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8446,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5494:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5514:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_cERC20_$8327",
                    "typeString": "contract cERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8448,
                    "name": "cERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8327,
                    "src": "5514:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8451,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5536:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5536:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5566:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "5566:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8455,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5590:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8454,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "5590:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8457,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5618:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5618:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8459,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5648:30:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                    "typeString": "contract ContributionCalc"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8458,
                    "name": "ContributionCalc",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8343,
                    "src": "5648:16:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8461,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5688:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5688:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5484:232:26"
            },
            "returnParameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5794:0:26"
            },
            "scope": 9043,
            "src": "5473:591:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "6255:302:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8515,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "6265:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:11:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8522,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "6387:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "6387:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6387:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6379:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6379:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6164644d696e746572286164647265737329",
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6446:20:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            "value": "addMinter(address)"
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8530,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22311,
                                "src": "6476:4:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 8529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6468:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6468:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8526,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22158,
                            "src": "6422:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6422:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 8532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6422:60:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8533,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "6496:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6516:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8518,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "6343:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                          "typeString": "contract ControllerInterface"
                        }
                      },
                      "id": 8520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14271,
                      "src": "6343:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_contract$_Avatar_$12705_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,contract Avatar,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6343:184:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "id": 8536,
                  "nodeType": "ExpressionStatement",
                  "src": "6343:184:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "6537:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 8539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "6537:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6537:13:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8541,
                  "nodeType": "ExpressionStatement",
                  "src": "6537:13:26"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8512,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6240:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6240:14:26"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6230:2:26"
            },
            "returnParameters": {
              "id": 8514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6255:0:26"
            },
            "scope": 9043,
            "src": "6216:341:26",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8556,
              "nodeType": "Block",
              "src": "6761:60:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8550,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "6771:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8552,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8545,
                          "src": "6801:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8551,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "6785:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "6771:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8555,
                  "nodeType": "ExpressionStatement",
                  "src": "6771:43:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the market maker contract\n@param _marketMaker address of the new contract",
            "id": 8557,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8548,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8547,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "6750:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6750:10:26"
              }
            ],
            "name": "setMarketMaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8557,
                  "src": "6721:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6721:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6720:22:26"
            },
            "returnParameters": {
              "id": 8549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6761:0:26"
            },
            "scope": 9043,
            "src": "6697:124:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "7025:43:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8564,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "7035:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8565,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8559,
                      "src": "7049:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7035:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8567,
                  "nodeType": "ExpressionStatement",
                  "src": "7035:26:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the fund manager contract\n@param _fundManager address of the new contract",
            "id": 8569,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8561,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7014:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7014:10:26"
              }
            ],
            "name": "setFundManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8559,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "6985:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:22:26"
            },
            "returnParameters": {
              "id": 8563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7025:0:26"
            },
            "scope": 9043,
            "src": "6961:107:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8580,
              "nodeType": "Block",
              "src": "7257:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8576,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "7267:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8577,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8571,
                      "src": "7283:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7267:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8579,
                  "nodeType": "ExpressionStatement",
                  "src": "7267:30:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new value",
            "id": 8581,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8574,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8573,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7246:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7246:10:26"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8581,
                  "src": "7215:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7215:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7214:24:26"
            },
            "returnParameters": {
              "id": 8575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7257:0:26"
            },
            "scope": 9043,
            "src": "7189:115:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8607,
              "nodeType": "Block",
              "src": "7539:197:26",
              "statements": [
                {
                  "assignments": [
                    8589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8589,
                      "name": "prevAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 8607,
                      "src": "7549:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7549:7:26",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "7579:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      ],
                      "id": 8590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7571:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7571:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8594,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "7602:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8596,
                          "name": "_contribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8583,
                          "src": "7634:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8595,
                        "name": "ContributionCalc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8343,
                        "src": "7617:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ContributionCalc_$8343_$",
                          "typeString": "type(contract ContributionCalc)"
                        }
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7617:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "7602:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "7602:46:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8601,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "7690:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7690:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8603,
                        "name": "prevAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8589,
                        "src": "7702:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8604,
                        "name": "_contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8583,
                        "src": "7715:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8600,
                      "name": "ContributionAddressUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8429,
                      "src": "7663:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 8605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7663:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8606,
                  "nodeType": "EmitStatement",
                  "src": "7658:71:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the contribution formula contract\n@param _contribution address of the new contribution contract",
            "id": 8608,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8585,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7528:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7528:10:26"
              }
            ],
            "name": "setContributionAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8583,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8608,
                  "src": "7498:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7498:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7497:23:26"
            },
            "returnParameters": {
              "id": 8587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7539:0:26"
            },
            "scope": 9043,
            "src": "7466:270:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8694,
              "nodeType": "Block",
              "src": "8573:770:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8627,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8623:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8623:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8630,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8643:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8635:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8631,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8635:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8625,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8604:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21474,
                            "src": "8604:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 8632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8604:45:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8633,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8612,
                          "src": "8653:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8604:61:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374",
                        "id": 8635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8679:41:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        },
                        "value": "You need to approve cDAI transfer first"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        }
                      ],
                      "id": 8624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8583:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:147:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8637,
                  "nodeType": "ExpressionStatement",
                  "src": "8583:147:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8783:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8783:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8644,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8803:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8795:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8795:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8646,
                              "name": "_tokenAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8612,
                              "src": "8810:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8639,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8761:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21578,
                            "src": "8761:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8761:62:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8827:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "8761:70:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e73666572",
                        "id": 8650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8845:59:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        },
                        "value": "transferFrom failed, make sure you approved cDAI transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        }
                      ],
                      "id": 8638,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8740:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8740:174:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8652,
                  "nodeType": "ExpressionStatement",
                  "src": "8740:174:26"
                },
                {
                  "assignments": [
                    8654
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8654,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8694,
                      "src": "8924:16:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8653,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8924:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8660,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8657,
                        "name": "_buyWith",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8610,
                        "src": "8959:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "8969:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "8943:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7772,
                      "src": "8943:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8943:39:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8924:58:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8662,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8654,
                          "src": "9000:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8663,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8614,
                          "src": "9012:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9000:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9024:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        },
                        "value": "GD return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        }
                      ],
                      "id": 8661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8992:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8992:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8667,
                  "nodeType": "ExpressionStatement",
                  "src": "8992:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9124:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9124:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9136:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8670,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "9096:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "9096:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9096:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9088:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9088:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8668,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "9074:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9074:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "9074:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9074:71:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "9074:71:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8682,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9188:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9188:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "_buyWith",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8610,
                            "src": "9220:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9212:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9212:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8687,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "9243:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8688,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8614,
                        "src": "9269:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8689,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9293:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8681,
                      "name": "TokenPurchased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8407,
                      "src": "9160:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9160:151:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8691,
                  "nodeType": "EmitStatement",
                  "src": "9155:156:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8692,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8654,
                    "src": "9328:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8623,
                  "id": 8693,
                  "nodeType": "Return",
                  "src": "9321:15:26"
                }
              ]
            },
            "documentation": "@dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n`buy` occurs only if the GD return is above the given minimum. It is possible\nto buy only with cDAI and when the contract is set to active. MUST call to\n`buyWith` `approve` prior this action to allow this contract to accomplish the\nconversion.\n@param _buyWith The tokens that should be converted to GD tokens\n@param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n@param _minReturn The minimum allowed return in GD tokens\n@return (gdReturn) How much GD tokens were transferred",
            "id": 8695,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8617,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8616,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "8522:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8522:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8619,
                    "name": "_buyWith",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8610,
                    "src": "8545:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8620,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8618,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "8536:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8536:18:26"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8610,
                  "name": "_buyWith",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8436:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8609,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8436:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8612,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8460:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8611,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8460:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8614,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8490:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8426:88:26"
            },
            "returnParameters": {
              "id": 8623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8564:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8564:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8563:9:26"
            },
            "scope": 9043,
            "src": "8414:929:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8778,
              "nodeType": "Block",
              "src": "10293:832:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8719,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10357:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10357:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10369:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8713,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "10325:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "10325:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10317:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10317:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8711,
                          "name": "ERC20Burnable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21880,
                          "src": "10303:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Burnable_$21880_$",
                            "typeString": "type(contract ERC20Burnable)"
                          }
                        },
                        "id": 8717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10303:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$21880",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "id": 8718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21879,
                      "src": "10303:53:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10303:76:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8723,
                  "nodeType": "ExpressionStatement",
                  "src": "10303:76:26"
                },
                {
                  "assignments": [
                    8725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8725,
                      "name": "contributionAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10389:26:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10389:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8735,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8728,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10466:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8729,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22311,
                        "src": "10491:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10509:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10509:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8732,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10533:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8733,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10554:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        },
                        {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8726,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "10418:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      },
                      "id": 8727,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8342,
                      "src": "10418:34:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_GoodMarketMaker_$8274_$_t_contract$_GoodReserveCDai_$9043_$_t_address_$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract GoodMarketMaker,contract GoodReserveCDai,address,contract ERC20,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10418:155:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10389:184:26"
                },
                {
                  "assignments": [
                    8737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8737,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10583:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8736,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10583:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8744,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8740,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10651:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10672:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8742,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "10695:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8738,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10605:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sellWithContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7936,
                      "src": "10605:32:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10605:118:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10583:140:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8737,
                          "src": "10741:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8747,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "10756:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10741:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10768:42:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        },
                        "value": "Token return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        }
                      ],
                      "id": 8745,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10733:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10733:78:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8751,
                  "nodeType": "ExpressionStatement",
                  "src": "10733:78:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "10846:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10846:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8757,
                              "name": "tokenReturn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "10858:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8753,
                              "name": "_sellTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8697,
                              "src": "10829:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21493,
                            "src": "10829:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10829:41:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10874:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "10829:49:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206661696c6564",
                        "id": 8761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10880:17:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        },
                        "value": "Transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        }
                      ],
                      "id": 8752,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10821:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10821:77:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "10821:77:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8765,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10936:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10936:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8768,
                            "name": "_sellTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8697,
                            "src": "10968:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10960:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10960:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8770,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10990:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8771,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "11013:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8772,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8701,
                        "src": "11045:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8773,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8737,
                        "src": "11069:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8764,
                      "name": "TokenSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "10913:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10913:177:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8775,
                  "nodeType": "EmitStatement",
                  "src": "10908:182:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8776,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8737,
                    "src": "11107:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8710,
                  "id": 8777,
                  "nodeType": "Return",
                  "src": "11100:18:26"
                }
              ]
            },
            "documentation": "@dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n`sell` occurs only if the token return is above the given minimum. Notice that\nthere is a contribution amount from the given GD that remains in the reserve.\nIt is only possible to sell to cDAI and only when the contract is set to\nactive. MUST be called to G$ `approve` prior to this action to allow this\ncontract to accomplish the conversion.\n@param _sellTo The tokens that will be received after the conversion\n@param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n@param _minReturn The minimum allowed `sellTo` tokens return\n@return (tokenReturn) How much `sellTo` tokens were transferred",
            "id": 8779,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8704,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8703,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "10243:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10243:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8706,
                    "name": "_sellTo",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8697,
                    "src": "10266:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8705,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "10257:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10257:17:26"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8697,
                  "name": "_sellTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10161:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8696,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10161:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8699,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10184:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10184:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10211:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10211:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:84:26"
            },
            "returnParameters": {
              "id": 8710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8709,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10284:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10284:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10283:9:26"
            },
            "scope": 9043,
            "src": "10138:987:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8791,
              "nodeType": "Block",
              "src": "11373:56:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8788,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "11415:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8786,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "11390:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7982,
                      "src": "11390:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view external returns (uint256)"
                      }
                    },
                    "id": 8789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11390:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8790,
                  "nodeType": "Return",
                  "src": "11383:39:26"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 8792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8781,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11329:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8780,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11329:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11328:14:26"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11364:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11364:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11363:9:26"
            },
            "scope": 9043,
            "src": "11307:122:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8805,
              "nodeType": "Block",
              "src": "11707:68:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8800,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "11741:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8797,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "11724:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11724:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "11724:16:26",
                        "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": 8801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11724:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8802,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "11758:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11724:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8796,
                  "id": 8804,
                  "nodeType": "Return",
                  "src": "11717:51:26"
                }
              ]
            },
            "documentation": "@dev Checks if enough blocks have passed so it would be possible to\nexecute `mintInterestAndUBI` according to the length of `blockInterval`\n@return (bool) True if enough blocks have passed",
            "id": 8806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11677:2:26"
            },
            "returnParameters": {
              "id": 8796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8795,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8806,
                  "src": "11701:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11701:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11700:6:26"
            },
            "scope": 9043,
            "src": "11661:114:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8945,
              "nodeType": "Block",
              "src": "12611:1074:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8827,
                          "name": "canMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8806,
                          "src": "12629:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12629:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 8829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12640:36:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 8826,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12621:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12621:56:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8831,
                  "nodeType": "ExpressionStatement",
                  "src": "12621:56:26"
                },
                {
                  "assignments": [
                    8833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8833,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12687:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12687:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8835,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12716:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8834,
                      "name": "currentPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "12703:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12703:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12687:44:26"
                },
                {
                  "assignments": [
                    8839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8839,
                      "name": "gdInterestToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12741:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8838,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8842,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12793:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8843,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "12809:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8840,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "12768:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8105,
                      "src": "12768:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12768:53:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12741:80:26"
                },
                {
                  "assignments": [
                    8847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8847,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12831:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8846,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "12831:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8855,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8850,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "12874:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "12874:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12874:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12866:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12866:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8848,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "12855:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12855:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12831:65:26"
                },
                {
                  "assignments": [
                    8857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8857,
                      "name": "precisionLoss",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12906:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12906:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8868,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8863,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8847,
                                "src": "12954:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "12954:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12954:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12946:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12946:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8859,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12938:2:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12930:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12930:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12930:15:26",
                      "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": 8867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12930:47:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12906:71:26"
                },
                {
                  "assignments": [
                    8870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8870,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12987:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8869,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12987:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13035:2:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8877,
                          "name": "precisionLoss",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8857,
                          "src": "13039:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13035:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8872,
                            "name": "_interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "13013:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8873,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8833,
                            "src": "13024:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8871,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "13008:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13008:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "13008:26:26",
                      "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": 8879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13008:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12987:66:26"
                },
                {
                  "assignments": [
                    8882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8882,
                      "name": "gdExpansionToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13063:25:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13063:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8885,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "13117:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "13091:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8273,
                      "src": "13091:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) external returns (uint256)"
                      }
                    },
                    "id": 8886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13091:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13063:69:26"
                },
                {
                  "assignments": [
                    8889
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8889,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13142:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8888,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13142:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8892,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13179:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13158:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "13158:20:26",
                      "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": 8893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13158:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13142:48:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8895,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8889,
                      "src": "13200:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "gdExpansionToMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8882,
                          "src": "13218:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8896,
                          "name": "gdUBI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8889,
                          "src": "13208:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "13208:9:26",
                        "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": 8899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13208:28:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13200:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "13200:36:26"
                },
                {
                  "assignments": [
                    8903
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8903,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13246:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8902,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13246:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8906,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13273:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8904,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13263:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13263:9:26",
                      "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": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13263:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13246:38:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8917,
                        "name": "fundManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8360,
                        "src": "13344:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8918,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8903,
                        "src": "13357:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8911,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "13316:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8912,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "13316:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13316:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13308:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13308:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8909,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "13294:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13294:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "13294:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13294:70:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8920,
                  "nodeType": "ExpressionStatement",
                  "src": "13294:70:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8921,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "13374:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8925,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "13404:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8922,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "13387:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13387:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "13387:16:26",
                        "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": 8926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13387:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13374:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8928,
                  "nodeType": "ExpressionStatement",
                  "src": "13374:44:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "lastMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8364,
                        "src": "13456:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8932,
                            "name": "_interestToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8808,
                            "src": "13488:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13480:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13480:23:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8934,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "13517:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8935,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13542:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8936,
                        "name": "gdExpansionToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8882,
                        "src": "13572:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8937,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13603:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8938,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13627:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8929,
                      "name": "UBIMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8445,
                      "src": "13433:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13433:209:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8940,
                  "nodeType": "EmitStatement",
                  "src": "13428:214:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 8941,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13660:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8942,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13672:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8943,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13659:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8825,
                  "id": 8944,
                  "nodeType": "Return",
                  "src": "13652:26:26"
                }
              ]
            },
            "documentation": "@dev Anyone can call this to trigger calculations.\nReserve sends UBI to Avatar DAO and returns interest to FundManager.\n@param _interestToken The token that was transfered to the reserve\n@param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n@param _interest Out of total transfered how much is the interest (in `_interestToken`)\nthat needs to be paid back (some interest might be donated)\n@return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted",
            "id": 8946,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8815,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8814,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "12501:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12501:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8817,
                    "name": "_interestToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8808,
                    "src": "12532:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8818,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8816,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "12523:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12523:24:26"
              },
              {
                "arguments": null,
                "id": 8820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8819,
                  "name": "onlyFundManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8378,
                  "src": "12556:15:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12556:15:26"
              }
            ],
            "name": "mintInterestAndUBI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8808,
                  "name": "_interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12395:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8807,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12395:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8810,
                  "name": "_transfered",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12425:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8809,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12425:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8812,
                  "name": "_interest",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12454:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12385:92:26"
            },
            "returnParameters": {
              "id": 8825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12589:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12589:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8824,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12598:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12598:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12588:18:26"
            },
            "scope": 9043,
            "src": "12358:1327:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9017,
              "nodeType": "Block",
              "src": "14043:610:26",
              "statements": [
                {
                  "assignments": [
                    8952
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8952,
                      "name": "remainingReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14118:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8951,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14118:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8956,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22311,
                            "src": "14168:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 8955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14160:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14160:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8953,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8356,
                        "src": "14145:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$8327",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 8954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8317,
                      "src": "14145:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14145:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14118:56:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8960,
                      "name": "remainingReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8952,
                      "src": "14188:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14207:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14188:20:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8975,
                  "nodeType": "IfStatement",
                  "src": "14184:178:26",
                  "trueBody": {
                    "id": 8974,
                    "nodeType": "Block",
                    "src": "14210:152:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8967,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "14271:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 8966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14263:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 8968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14263:15:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8969,
                                  "name": "remainingReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8952,
                                  "src": "14280:16:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8964,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8356,
                                  "src": "14249:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_cERC20_$8327",
                                    "typeString": "contract cERC20"
                                  }
                                },
                                "id": 8965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8326,
                                "src": "14249:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 8970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14249:48:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 8971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:22:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 8963,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "14224:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14224:127:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8973,
                        "nodeType": "ExpressionStatement",
                        "src": "14224:127:26"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "14402:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14394:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14394:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8977,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "14379:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            },
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8317,
                            "src": "14379:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14379:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14412:1:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14379:34:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46756e6473207472616e7366657220686173206661696c6564",
                        "id": 8985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14415:27:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        },
                        "value": "Funds transfer has failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        }
                      ],
                      "id": 8976,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14371:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14371:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8987,
                  "nodeType": "ExpressionStatement",
                  "src": "14371:72:26"
                },
                {
                  "assignments": [
                    8989
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8989,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14453:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8988,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14453:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8997,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8992,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14496:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14496:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14496:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14488:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14488:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8990,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14477:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14477:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14453:65:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9002,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 861,
                            "src": "14566:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          ],
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14558:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 9003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14558:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8998,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "14528:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14528:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14528:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9005,
                  "nodeType": "ExpressionStatement",
                  "src": "14528:46:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9006,
                        "name": "gooddollar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8989,
                        "src": "14584:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 9008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "renounceMinter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20811,
                      "src": "14584:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14584:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9010,
                  "nodeType": "ExpressionStatement",
                  "src": "14584:27:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9014,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "14639:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9011,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "14621:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 9013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "14621:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 9015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14621:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9016,
                  "nodeType": "ExpressionStatement",
                  "src": "14621:25:26"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\nand has transferred the market maker ownership to `_avatar`. Inactive means that\nbuy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\nexecutes this method",
            "id": 9018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8949,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8948,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14032:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14032:10:26"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14022:2:26"
            },
            "returnParameters": {
              "id": 8950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14043:0:26"
            },
            "scope": 9043,
            "src": "14010:643:26",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9041,
              "nodeType": "Block",
              "src": "14844:152:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9029,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14899:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              ],
                              "id": 9028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14891:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 9030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14891:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9034,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22311,
                                    "src": "14933:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  ],
                                  "id": 9033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14925:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 9035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14925:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9020,
                                "src": "14908:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 9032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21458,
                              "src": "14908:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 9036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14908:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9026,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9020,
                            "src": "14875:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 9027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21493,
                          "src": "14875:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 9037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14875:65:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265636f766572207472616e73666572206661696c6564",
                        "id": 9038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14954:25:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        },
                        "value": "recover transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        }
                      ],
                      "id": 9025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14854:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14854:135:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9040,
                  "nodeType": "ExpressionStatement",
                  "src": "14854:135:26"
                }
              ]
            },
            "documentation": "@dev method to recover any stuck erc20 tokens (ie compound COMP)\n@param _token the ERC20 token to recover",
            "id": 9042,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9022,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14833:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14833:10:26"
              }
            ],
            "name": "recover",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9020,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 9042,
                  "src": "14812:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9019,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14812:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14811:14:26"
            },
            "returnParameters": {
              "id": 9024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14844:0:26"
            },
            "scope": 9043,
            "src": "14795:201:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9044,
        "src": "1355:13643:26"
      }
    ],
    "src": "0:14999:26"
  },
  "legacyAST": {
    "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodReserveCDai.sol",
    "exportedSymbols": {
      "ContributionCalc": [
        8343
      ],
      "GoodReserveCDai": [
        9043
      ],
      "cERC20": [
        8327
      ]
    },
    "id": 9044,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8276,
        "literals": [
          "solidity",
          ">",
          "0.5",
          ".4"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:26"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 8277,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21309,
        "src": "25:59:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 8278,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21850,
        "src": "85:63:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol",
        "id": 8279,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21967,
        "src": "149:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol",
        "id": 8280,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 21881,
        "src": "221:71:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@daostack/arc/contracts/controller/Avatar.sol",
        "file": "@daostack/arc/contracts/controller/Avatar.sol",
        "id": 8281,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 12706,
        "src": "293:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/FeelessScheme.sol",
        "file": "../../contracts/dao/schemes/FeelessScheme.sol",
        "id": 8282,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1228,
        "src": "349:55:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/dao/schemes/ActivePeriod.sol",
        "file": "../../contracts/dao/schemes/ActivePeriod.sol",
        "id": 8283,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 1005,
        "src": "405:54:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/DSMath.sol",
        "file": "../../contracts/DSMath.sol",
        "id": 8284,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 304,
        "src": "460:36:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/contracts/token/GoodDollar.sol",
        "file": "../../contracts/token/GoodDollar.sol",
        "id": 8285,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 3768,
        "src": "497:46:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/hadar/workspace/GoodDollar/GoodBootstrap/packages/contracts/stakingModel/contracts/GoodMarketMaker.sol",
        "file": "./GoodMarketMaker.sol",
        "id": 8286,
        "nodeType": "ImportDirective",
        "scope": 9044,
        "sourceUnit": 8275,
        "src": "544:31:26",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8327,
        "linearizedBaseContracts": [
          8327
        ],
        "name": "cERC20",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8293,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8288,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "614:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8287,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "614:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "613:20:26"
            },
            "returnParameters": {
              "id": 8292,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8291,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8293,
                  "src": "652:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8290,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "652:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "651:9:26"
            },
            "scope": 8327,
            "src": "600:61:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8300,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "redeemUnderlying",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8296,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8295,
                  "name": "mintAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "693:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8294,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "692:20:26"
            },
            "returnParameters": {
              "id": 8299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8298,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8300,
                  "src": "731:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8297,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:9:26"
            },
            "scope": 8327,
            "src": "667:73:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8305,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateCurrent",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8301,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "774:2:26"
            },
            "returnParameters": {
              "id": 8304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8303,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8305,
                  "src": "795:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8302,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "795:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "794:9:26"
            },
            "scope": 8327,
            "src": "746:58:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8310,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "exchangeRateStored",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8306,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "837:2:26"
            },
            "returnParameters": {
              "id": 8309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8308,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8310,
                  "src": "863:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8307,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "863:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "862:9:26"
            },
            "scope": 8327,
            "src": "810:62:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8317,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8312,
                  "name": "addr",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "897:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8311,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "896:14:26"
            },
            "returnParameters": {
              "id": 8316,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8315,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8317,
                  "src": "934:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8314,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "934:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "933:9:26"
            },
            "scope": 8327,
            "src": "878:65:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": null,
            "id": 8326,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8319,
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "967:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8318,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "967:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8321,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "979:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8320,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "979:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "966:28:26"
            },
            "returnParameters": {
              "id": 8325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8324,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8326,
                  "src": "1013:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1013:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1012:6:26"
            },
            "scope": 8327,
            "src": "949:70:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "577:444:26"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": null,
        "fullyImplemented": false,
        "id": 8343,
        "linearizedBaseContracts": [
          8343
        ],
        "name": "ContributionCalc",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 8342,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "calculateContribution",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8329,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1096:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                    "typeString": "contract GoodMarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8328,
                    "name": "GoodMarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8274,
                    "src": "1096:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8331,
                  "name": "_reserve",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1134:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                    "typeString": "contract GoodReserveCDai"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8330,
                    "name": "GoodReserveCDai",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 9043,
                    "src": "1134:15:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                      "typeString": "contract GoodReserveCDai"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8333,
                  "name": "_contributer",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1168:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8332,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1168:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8335,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1198:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8334,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "1198:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8337,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1220:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1220:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1086:157:26"
            },
            "returnParameters": {
              "id": 8341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8340,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8342,
                  "src": "1267:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1267:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1266:9:26"
            },
            "scope": 8343,
            "src": "1056:220:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 9044,
        "src": "1023:255:26"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8344,
              "name": "DSMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 303,
              "src": "1383:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DSMath_$303",
                "typeString": "contract DSMath"
              }
            },
            "id": 8345,
            "nodeType": "InheritanceSpecifier",
            "src": "1383:6:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8346,
              "name": "FeelessScheme",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1227,
              "src": "1391:13:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FeelessScheme_$1227",
                "typeString": "contract FeelessScheme"
              }
            },
            "id": 8347,
            "nodeType": "InheritanceSpecifier",
            "src": "1391:13:26"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8348,
              "name": "ActivePeriod",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1004,
              "src": "1406:12:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ActivePeriod_$1004",
                "typeString": "contract ActivePeriod"
              }
            },
            "id": 8349,
            "nodeType": "InheritanceSpecifier",
            "src": "1406:12:26"
          }
        ],
        "contractDependencies": [
          303,
          1004,
          1227,
          1423,
          2667,
          21417
        ],
        "contractKind": "contract",
        "documentation": "@title Reserve based on cDAI and dynamic reserve ratio market maker",
        "fullyImplemented": true,
        "id": 9043,
        "linearizedBaseContracts": [
          9043,
          1004,
          1227,
          2667,
          1423,
          21417,
          303
        ],
        "name": "GoodReserveCDai",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 8352,
            "libraryName": {
              "contractScope": null,
              "id": 8350,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21308,
              "src": "1431:8:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$21308",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1425:27:26",
            "typeName": {
              "id": 8351,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1444:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 8354,
            "name": "dai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1483:16:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20_$21849",
              "typeString": "contract ERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8353,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21849,
              "src": "1483:5:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$21849",
                "typeString": "contract ERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8356,
            "name": "cDai",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1532:18:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_cERC20_$8327",
              "typeString": "contract cERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 8355,
              "name": "cERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8327,
              "src": "1532:6:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_cERC20_$8327",
                "typeString": "contract cERC20"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8358,
            "name": "marketMaker",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1686:34:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
              "typeString": "contract GoodMarketMaker"
            },
            "typeName": {
              "contractScope": null,
              "id": 8357,
              "name": "GoodMarketMaker",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8274,
              "src": "1686:15:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                "typeString": "contract GoodMarketMaker"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8360,
            "name": "fundManager",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1821:26:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 8359,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1821:7:26",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8362,
            "name": "blockInterval",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "1994:28:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8361,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1994:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8364,
            "name": "lastMinted",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2113:25:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 8363,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "2113:7:26",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 8366,
            "name": "contribution",
            "nodeType": "VariableDeclaration",
            "scope": 9043,
            "src": "2262:36:26",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ContributionCalc_$8343",
              "typeString": "contract ContributionCalc"
            },
            "typeName": {
              "contractScope": null,
              "id": 8365,
              "name": "ContributionCalc",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 8343,
              "src": "2262:16:26",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                "typeString": "contract ContributionCalc"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8377,
              "nodeType": "Block",
              "src": "2330:103:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8369,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22171,
                            "src": "2348:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 8370,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2348:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8371,
                          "name": "fundManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8360,
                          "src": "2362:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2348:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c792046756e644d616e616765722063616e2063616c6c2074686973206d6574686f64",
                        "id": 8373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2375:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        },
                        "value": "Only FundManager can call this method"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8659903c14beb1decb5cde807aae2b42823801f7a2ec9f1cb2d42f84ff652fab",
                          "typeString": "literal_string \"Only FundManager can call this method\""
                        }
                      ],
                      "id": 8368,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2340:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2340:75:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8375,
                  "nodeType": "ExpressionStatement",
                  "src": "2340:75:26"
                },
                {
                  "id": 8376,
                  "nodeType": "PlaceholderStatement",
                  "src": "2425:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8378,
            "name": "onlyFundManager",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8367,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2330:0:26"
            },
            "src": "2305:128:26",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8394,
              "nodeType": "Block",
              "src": "2470:94:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 8389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8384,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8380,
                              "src": "2496:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            ],
                            "id": 8383,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2488:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8385,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2488:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 8387,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "2514:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            ],
                            "id": 8386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2506:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 8388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2506:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2488:31:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f6e6c79206344414920697320737570706f72746564",
                        "id": 8390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2521:24:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        },
                        "value": "Only cDAI is supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6611800b21faf1cbaf099b967ab2df71f07063bb467267da93bacb005dc2712f",
                          "typeString": "literal_string \"Only cDAI is supported\""
                        }
                      ],
                      "id": 8382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "2480:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2480:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8392,
                  "nodeType": "ExpressionStatement",
                  "src": "2480:66:26"
                },
                {
                  "id": 8393,
                  "nodeType": "PlaceholderStatement",
                  "src": "2556:1:26"
                }
              ]
            },
            "documentation": null,
            "id": 8395,
            "name": "onlyCDai",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 8381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8380,
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8395,
                  "src": "2457:11:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8379,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "2457:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2456:13:26"
            },
            "src": "2439:125:26",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8407,
            "name": "TokenPurchased",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8397,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2680:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8396,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2680:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8399,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2815:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8398,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2815:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8401,
                  "indexed": false,
                  "name": "reserveAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2886:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8400,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2886:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8403,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "2990:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8402,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8405,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8407,
                  "src": "3074:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3074:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2632:468:26"
            },
            "src": "2612:489:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8421,
            "name": "TokenSold",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8409,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3207:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3207:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8411,
                  "indexed": true,
                  "name": "reserveToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3335:28:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8410,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3335:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8413,
                  "indexed": false,
                  "name": "gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3401:16:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8412,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3401:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8415,
                  "indexed": false,
                  "name": "contributionAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3527:26:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8414,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3527:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8417,
                  "indexed": false,
                  "name": "minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3648:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8416,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3648:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8419,
                  "indexed": false,
                  "name": "actualReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8421,
                  "src": "3732:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8418,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3732:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3159:599:26"
            },
            "src": "3144:615:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8429,
            "name": "ContributionAddressUpdated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8428,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8423,
                  "indexed": true,
                  "name": "caller",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "3915:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8422,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3915:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8425,
                  "indexed": false,
                  "name": "prevAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4008:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8424,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8427,
                  "indexed": false,
                  "name": "newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 8429,
                  "src": "4101:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8426,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4101:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3867:258:26"
            },
            "src": "3835:291:26"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8445,
            "name": "UBIMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8431,
                  "indexed": true,
                  "name": "day",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4219:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4219:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8433,
                  "indexed": true,
                  "name": "interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4285:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4285:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8435,
                  "indexed": false,
                  "name": "interestReceived",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4379:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4379:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8437,
                  "indexed": false,
                  "name": "gdInterestMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4525:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8436,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4525:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8439,
                  "indexed": false,
                  "name": "gdExpansionMinted",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4672:25:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8438,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4672:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8441,
                  "indexed": false,
                  "name": "gdInterestTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4792:29:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8440,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4792:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8443,
                  "indexed": false,
                  "name": "gdUbiTransferred",
                  "nodeType": "VariableDeclaration",
                  "scope": 8445,
                  "src": "4911:24:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8442,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4911:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4186:755:26"
            },
            "src": "4171:771:26"
          },
          {
            "body": {
              "id": 8509,
              "nodeType": "Block",
              "src": "5794:270:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8475,
                      "name": "dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8354,
                      "src": "5804:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8476,
                      "name": "_dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8447,
                      "src": "5810:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20_$21849",
                        "typeString": "contract ERC20"
                      }
                    },
                    "src": "5804:10:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "id": 8478,
                  "nodeType": "ExpressionStatement",
                  "src": "5804:10:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8479,
                      "name": "cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8356,
                      "src": "5824:4:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8480,
                      "name": "_cDai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8449,
                      "src": "5831:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_cERC20_$8327",
                        "typeString": "contract cERC20"
                      }
                    },
                    "src": "5824:12:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "id": 8482,
                  "nodeType": "ExpressionStatement",
                  "src": "5824:12:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8485,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8483,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "5846:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8484,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8451,
                      "src": "5860:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5846:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8486,
                  "nodeType": "ExpressionStatement",
                  "src": "5846:26:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8487,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "5882:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8489,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8457,
                          "src": "5912:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8488,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "5896:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5896:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "5882:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8492,
                  "nodeType": "ExpressionStatement",
                  "src": "5882:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8493,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "5935:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8494,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8461,
                      "src": "5951:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5935:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8496,
                  "nodeType": "ExpressionStatement",
                  "src": "5935:30:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8497,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "5975:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8501,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "6005:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8498,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "5988:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "5988:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "5988:16:26",
                        "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": 8502,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5988:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5975:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8504,
                  "nodeType": "ExpressionStatement",
                  "src": "5975:44:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8505,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "6029:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8506,
                      "name": "_contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8459,
                      "src": "6044:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "6029:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8508,
                  "nodeType": "ExpressionStatement",
                  "src": "6029:28:26"
                }
              ]
            },
            "documentation": "@dev Constructor\n@param _dai The address of DAI\n@param _cDai The address of cDAI\n@param _fundManager The address of the fund manager contract\n@param _avatar The avatar of the DAO\n@param _identity The identity contract\n@param _marketMaker The address of the market maker contract\n@param _contribution The address of the contribution contract\n@param _blockInterval How many blocks should be passed before the next execution of `mintInterestAndUBI`",
            "id": 8510,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8464,
                    "name": "_identity",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8455,
                    "src": "5738:9:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8465,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5749:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8466,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8463,
                  "name": "FeelessScheme",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1227,
                  "src": "5724:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_FeelessScheme_$1227_$",
                    "typeString": "type(contract FeelessScheme)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5724:33:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8468,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 22173,
                    "src": "5771:3:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8471,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8469,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22173,
                      "src": "5776:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 8470,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5782:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "src": "5776:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 8472,
                    "name": "_avatar",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8453,
                    "src": "5785:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  }
                ],
                "id": 8473,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8467,
                  "name": "ActivePeriod",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1004,
                  "src": "5758:12:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_ActivePeriod_$1004_$",
                    "typeString": "type(contract ActivePeriod)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5758:35:26"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8447,
                  "name": "_dai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5494:10:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8446,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "5494:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8449,
                  "name": "_cDai",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5514:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_cERC20_$8327",
                    "typeString": "contract cERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8448,
                    "name": "cERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8327,
                    "src": "5514:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_cERC20_$8327",
                      "typeString": "contract cERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8451,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5536:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8450,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5536:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8453,
                  "name": "_avatar",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5566:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Avatar_$12705",
                    "typeString": "contract Avatar"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8452,
                    "name": "Avatar",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 12705,
                    "src": "5566:6:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Avatar_$12705",
                      "typeString": "contract Avatar"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8455,
                  "name": "_identity",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5590:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Identity_$2380",
                    "typeString": "contract Identity"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8454,
                    "name": "Identity",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 2380,
                    "src": "5590:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Identity_$2380",
                      "typeString": "contract Identity"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8457,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5618:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8456,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5618:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8459,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5648:30:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                    "typeString": "contract ContributionCalc"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8458,
                    "name": "ContributionCalc",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 8343,
                    "src": "5648:16:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8461,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8510,
                  "src": "5688:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8460,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5688:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5484:232:26"
            },
            "returnParameters": {
              "id": 8474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5794:0:26"
            },
            "scope": 9043,
            "src": "5473:591:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8542,
              "nodeType": "Block",
              "src": "6255:302:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8515,
                      "name": "addRights",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1203,
                      "src": "6265:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6265:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8517,
                  "nodeType": "ExpressionStatement",
                  "src": "6265:11:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8522,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "6387:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8523,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "6387:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6387:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6379:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8525,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6379:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "6164644d696e746572286164647265737329",
                            "id": 8528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6446:20:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            "value": "addMinter(address)"
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 8530,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22311,
                                "src": "6476:4:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                  "typeString": "contract GoodReserveCDai"
                                }
                              ],
                              "id": 8529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6468:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6468:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_983b2d560bdd6b422e26073d9516b4646e2f1008810070c0d32b3a79aaa7bfcb",
                              "typeString": "literal_string \"addMinter(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 8526,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22158,
                            "src": "6422:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 8527,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "6422:23:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 8532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6422:60:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8533,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "6496:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 8534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6516:1:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8518,
                        "name": "controller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1286,
                        "src": "6343:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ControllerInterface_$14394",
                          "typeString": "contract ControllerInterface"
                        }
                      },
                      "id": 8520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "genericCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14271,
                      "src": "6343:22:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_contract$_Avatar_$12705_$_t_uint256_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (address,bytes memory,contract Avatar,uint256) external returns (bool,bytes memory)"
                      }
                    },
                    "id": 8535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6343:184:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "id": 8536,
                  "nodeType": "ExpressionStatement",
                  "src": "6343:184:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8537,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "6537:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 8539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "start",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 969,
                      "src": "6537:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6537:13:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8541,
                  "nodeType": "ExpressionStatement",
                  "src": "6537:13:26"
                }
              ]
            },
            "documentation": "@dev Start function. Adds this contract to identity as a feeless scheme.\nCan only be called if scheme is registered",
            "id": 8543,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8513,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8512,
                  "name": "onlyRegistered",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1335,
                  "src": "6240:14:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6240:14:26"
              }
            ],
            "name": "start",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6230:2:26"
            },
            "returnParameters": {
              "id": 8514,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6255:0:26"
            },
            "scope": 9043,
            "src": "6216:341:26",
            "stateMutability": "nonpayable",
            "superFunction": 969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8556,
              "nodeType": "Block",
              "src": "6761:60:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8554,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8550,
                      "name": "marketMaker",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8358,
                      "src": "6771:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8552,
                          "name": "_marketMaker",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8545,
                          "src": "6801:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8551,
                        "name": "GoodMarketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8274,
                        "src": "6785:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_GoodMarketMaker_$8274_$",
                          "typeString": "type(contract GoodMarketMaker)"
                        }
                      },
                      "id": 8553,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6785:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                        "typeString": "contract GoodMarketMaker"
                      }
                    },
                    "src": "6771:43:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                      "typeString": "contract GoodMarketMaker"
                    }
                  },
                  "id": 8555,
                  "nodeType": "ExpressionStatement",
                  "src": "6771:43:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the market maker contract\n@param _marketMaker address of the new contract",
            "id": 8557,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8548,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8547,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "6750:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6750:10:26"
              }
            ],
            "name": "setMarketMaker",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8546,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8545,
                  "name": "_marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 8557,
                  "src": "6721:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8544,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6721:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6720:22:26"
            },
            "returnParameters": {
              "id": 8549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6761:0:26"
            },
            "scope": 9043,
            "src": "6697:124:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8568,
              "nodeType": "Block",
              "src": "7025:43:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8564,
                      "name": "fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8360,
                      "src": "7035:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8565,
                      "name": "_fundManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8559,
                      "src": "7049:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "7035:26:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 8567,
                  "nodeType": "ExpressionStatement",
                  "src": "7035:26:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the fund manager contract\n@param _fundManager address of the new contract",
            "id": 8569,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8562,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8561,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7014:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7014:10:26"
              }
            ],
            "name": "setFundManager",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8560,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8559,
                  "name": "_fundManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 8569,
                  "src": "6985:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8558,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6985:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6984:22:26"
            },
            "returnParameters": {
              "id": 8563,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7025:0:26"
            },
            "scope": 9043,
            "src": "6961:107:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8580,
              "nodeType": "Block",
              "src": "7257:47:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8578,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8576,
                      "name": "blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8362,
                      "src": "7267:13:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 8577,
                      "name": "_blockInterval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8571,
                      "src": "7283:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7267:30:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8579,
                  "nodeType": "ExpressionStatement",
                  "src": "7267:30:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the block interval\n@param _blockInterval the new value",
            "id": 8581,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8574,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8573,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7246:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7246:10:26"
              }
            ],
            "name": "setBlockInterval",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8572,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8571,
                  "name": "_blockInterval",
                  "nodeType": "VariableDeclaration",
                  "scope": 8581,
                  "src": "7215:22:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8570,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7215:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7214:24:26"
            },
            "returnParameters": {
              "id": 8575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7257:0:26"
            },
            "scope": 9043,
            "src": "7189:115:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8607,
              "nodeType": "Block",
              "src": "7539:197:26",
              "statements": [
                {
                  "assignments": [
                    8589
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8589,
                      "name": "prevAddress",
                      "nodeType": "VariableDeclaration",
                      "scope": 8607,
                      "src": "7549:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 8588,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "7549:7:26",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8591,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "7579:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      ],
                      "id": 8590,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "7571:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 8592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7571:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7549:43:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8594,
                      "name": "contribution",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8366,
                      "src": "7602:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8596,
                          "name": "_contribution",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8583,
                          "src": "7634:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 8595,
                        "name": "ContributionCalc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8343,
                        "src": "7617:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ContributionCalc_$8343_$",
                          "typeString": "type(contract ContributionCalc)"
                        }
                      },
                      "id": 8597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7617:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                        "typeString": "contract ContributionCalc"
                      }
                    },
                    "src": "7602:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                      "typeString": "contract ContributionCalc"
                    }
                  },
                  "id": 8599,
                  "nodeType": "ExpressionStatement",
                  "src": "7602:46:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8601,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "7690:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7690:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8603,
                        "name": "prevAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8589,
                        "src": "7702:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8604,
                        "name": "_contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8583,
                        "src": "7715:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8600,
                      "name": "ContributionAddressUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8429,
                      "src": "7663:26:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 8605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7663:66:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8606,
                  "nodeType": "EmitStatement",
                  "src": "7658:71:26"
                }
              ]
            },
            "documentation": "@dev Allows the DAO to change the contribution formula contract\n@param _contribution address of the new contribution contract",
            "id": 8608,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8586,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8585,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "7528:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7528:10:26"
              }
            ],
            "name": "setContributionAddress",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8583,
                  "name": "_contribution",
                  "nodeType": "VariableDeclaration",
                  "scope": 8608,
                  "src": "7498:21:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8582,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7498:7:26",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7497:23:26"
            },
            "returnParameters": {
              "id": 8587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7539:0:26"
            },
            "scope": 9043,
            "src": "7466:270:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8694,
              "nodeType": "Block",
              "src": "8573:770:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8634,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8627,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8623:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8623:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8630,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8643:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8635:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8631,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8635:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8625,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8604:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8626,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "allowance",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21474,
                            "src": "8604:18:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view external returns (uint256)"
                            }
                          },
                          "id": 8632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8604:45:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8633,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8612,
                          "src": "8653:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8604:61:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "596f75206e65656420746f20617070726f76652063444149207472616e73666572206669727374",
                        "id": 8635,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8679:41:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        },
                        "value": "You need to approve cDAI transfer first"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f32a1e6e77966d694bc1ee2f99df81e54285fd4874d9ecb510ee4cf4b43d729e",
                          "typeString": "literal_string \"You need to approve cDAI transfer first\""
                        }
                      ],
                      "id": 8624,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8583:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:147:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8637,
                  "nodeType": "ExpressionStatement",
                  "src": "8583:147:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8649,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8641,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "8783:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "8783:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8644,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "8803:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "8795:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8795:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8646,
                              "name": "_tokenAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8612,
                              "src": "8810:12:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8639,
                              "name": "_buyWith",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8610,
                              "src": "8761:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21578,
                            "src": "8761:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8761:62:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8827:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "8761:70:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7472616e7366657246726f6d206661696c65642c206d616b65207375726520796f7520617070726f7665642063444149207472616e73666572",
                        "id": 8650,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8845:59:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        },
                        "value": "transferFrom failed, make sure you approved cDAI transfer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5f9bc1ecee198826c3960d7d45b75066d789f3149e8f67e92b4f00c4b033fb91",
                          "typeString": "literal_string \"transferFrom failed, make sure you approved cDAI transfer\""
                        }
                      ],
                      "id": 8638,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8740:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8651,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8740:174:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8652,
                  "nodeType": "ExpressionStatement",
                  "src": "8740:174:26"
                },
                {
                  "assignments": [
                    8654
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8654,
                      "name": "gdReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8694,
                      "src": "8924:16:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8653,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8924:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8660,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8657,
                        "name": "_buyWith",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8610,
                        "src": "8959:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8658,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "8969:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8655,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "8943:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7772,
                      "src": "8943:15:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8943:39:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8924:58:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8664,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8662,
                          "name": "gdReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8654,
                          "src": "9000:8:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8663,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8614,
                          "src": "9012:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9000:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "47442072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9024:39:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        },
                        "value": "GD return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_51ea6074161d8e21af50a50b8c4950b1227f8b4bc05f739667a3973904e7b934",
                          "typeString": "literal_string \"GD return must be above the minReturn\""
                        }
                      ],
                      "id": 8661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "8992:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8992:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8667,
                  "nodeType": "ExpressionStatement",
                  "src": "8992:72:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8676,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9124:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8677,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9124:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8678,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9136:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8670,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "9096:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8671,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "9096:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8672,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9096:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9088:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8673,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9088:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8668,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "9074:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8674,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9074:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "9074:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9074:71:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8680,
                  "nodeType": "ExpressionStatement",
                  "src": "9074:71:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8682,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "9188:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9188:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8685,
                            "name": "_buyWith",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8610,
                            "src": "9220:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9212:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9212:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8687,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8612,
                        "src": "9243:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8688,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8614,
                        "src": "9269:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8689,
                        "name": "gdReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8654,
                        "src": "9293:8:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8681,
                      "name": "TokenPurchased",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8407,
                      "src": "9160:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9160:151:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8691,
                  "nodeType": "EmitStatement",
                  "src": "9155:156:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8692,
                    "name": "gdReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8654,
                    "src": "9328:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8623,
                  "id": 8693,
                  "nodeType": "Return",
                  "src": "9321:15:26"
                }
              ]
            },
            "documentation": "@dev Converts `buyWith` tokens to GD tokens and updates the bonding curve params.\n`buy` occurs only if the GD return is above the given minimum. It is possible\nto buy only with cDAI and when the contract is set to active. MUST call to\n`buyWith` `approve` prior this action to allow this contract to accomplish the\nconversion.\n@param _buyWith The tokens that should be converted to GD tokens\n@param _tokenAmount The amount of `buyWith` tokens that should be converted to GD tokens\n@param _minReturn The minimum allowed return in GD tokens\n@return (gdReturn) How much GD tokens were transferred",
            "id": 8695,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8617,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8616,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "8522:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8522:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8619,
                    "name": "_buyWith",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8610,
                    "src": "8545:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8620,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8618,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "8536:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8536:18:26"
              }
            ],
            "name": "buy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8615,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8610,
                  "name": "_buyWith",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8436:14:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8609,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "8436:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8612,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8460:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8611,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8460:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8614,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8490:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8613,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8490:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8426:88:26"
            },
            "returnParameters": {
              "id": 8623,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8622,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8695,
                  "src": "8564:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8621,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8564:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8563:9:26"
            },
            "scope": 9043,
            "src": "8414:929:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8778,
              "nodeType": "Block",
              "src": "10293:832:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8719,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10357:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10357:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8721,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10369:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8713,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "10325:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8714,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "10325:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8715,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10325:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8712,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10317:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10317:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8711,
                          "name": "ERC20Burnable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21880,
                          "src": "10303:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Burnable_$21880_$",
                            "typeString": "type(contract ERC20Burnable)"
                          }
                        },
                        "id": 8717,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10303:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Burnable_$21880",
                          "typeString": "contract ERC20Burnable"
                        }
                      },
                      "id": 8718,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "burnFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21879,
                      "src": "10303:53:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 8722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10303:76:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8723,
                  "nodeType": "ExpressionStatement",
                  "src": "10303:76:26"
                },
                {
                  "assignments": [
                    8725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8725,
                      "name": "contributionAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10389:26:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10389:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8735,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8728,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10466:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8729,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22311,
                        "src": "10491:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8730,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10509:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8731,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10509:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8732,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10533:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8733,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10554:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        },
                        {
                          "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                          "typeString": "contract GoodReserveCDai"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8726,
                        "name": "contribution",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8366,
                        "src": "10418:12:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ContributionCalc_$8343",
                          "typeString": "contract ContributionCalc"
                        }
                      },
                      "id": 8727,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "calculateContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8342,
                      "src": "10418:34:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_GoodMarketMaker_$8274_$_t_contract$_GoodReserveCDai_$9043_$_t_address_$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract GoodMarketMaker,contract GoodReserveCDai,address,contract ERC20,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 8734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10418:155:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10389:184:26"
                },
                {
                  "assignments": [
                    8737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8737,
                      "name": "tokenReturn",
                      "nodeType": "VariableDeclaration",
                      "scope": 8778,
                      "src": "10583:19:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8736,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10583:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8744,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8740,
                        "name": "_sellTo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8697,
                        "src": "10651:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8741,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10672:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8742,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "10695:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8738,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "10605:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sellWithContribution",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7936,
                      "src": "10605:32:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10605:118:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10583:140:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 8746,
                          "name": "tokenReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8737,
                          "src": "10741:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8747,
                          "name": "_minReturn",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8701,
                          "src": "10756:10:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "10741:25:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e2072657475726e206d7573742062652061626f766520746865206d696e52657475726e",
                        "id": 8749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10768:42:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        },
                        "value": "Token return must be above the minReturn"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c6d7b666310065639eb0b875a52ad6dddfa6ae7e04927e0ed9bf030b6c97eb5",
                          "typeString": "literal_string \"Token return must be above the minReturn\""
                        }
                      ],
                      "id": 8745,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10733:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10733:78:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8751,
                  "nodeType": "ExpressionStatement",
                  "src": "10733:78:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 8760,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 8755,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22171,
                                "src": "10846:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 8756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "10846:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 8757,
                              "name": "tokenReturn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8737,
                              "src": "10858:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8753,
                              "name": "_sellTo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8697,
                              "src": "10829:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$21849",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 8754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 21493,
                            "src": "10829:16:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 8758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10829:41:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 8759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10874:4:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "src": "10829:49:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206661696c6564",
                        "id": 8761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10880:17:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        },
                        "value": "Transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_25adaa6d082ce15f901e0d8a3d393e7462ef9edf2e6bc8321fa14d1615b6fc51",
                          "typeString": "literal_string \"Transfer failed\""
                        }
                      ],
                      "id": 8752,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "10821:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10821:77:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8763,
                  "nodeType": "ExpressionStatement",
                  "src": "10821:77:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 8765,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "10936:3:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 8766,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "10936:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8768,
                            "name": "_sellTo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8697,
                            "src": "10968:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8767,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10960:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8769,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10960:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8770,
                        "name": "_gdAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8699,
                        "src": "10990:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8771,
                        "name": "contributionAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8725,
                        "src": "11013:18:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8772,
                        "name": "_minReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8701,
                        "src": "11045:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8773,
                        "name": "tokenReturn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8737,
                        "src": "11069:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8764,
                      "name": "TokenSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8421,
                      "src": "10913:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10913:177:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8775,
                  "nodeType": "EmitStatement",
                  "src": "10908:182:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8776,
                    "name": "tokenReturn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8737,
                    "src": "11107:11:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8710,
                  "id": 8777,
                  "nodeType": "Return",
                  "src": "11100:18:26"
                }
              ]
            },
            "documentation": "@dev Converts GD tokens to `sellTo` tokens and update the bonding curve params.\n`sell` occurs only if the token return is above the given minimum. Notice that\nthere is a contribution amount from the given GD that remains in the reserve.\nIt is only possible to sell to cDAI and only when the contract is set to\nactive. MUST be called to G$ `approve` prior to this action to allow this\ncontract to accomplish the conversion.\n@param _sellTo The tokens that will be received after the conversion\n@param _gdAmount The amount of GD tokens that should be converted to `_sellTo` tokens\n@param _minReturn The minimum allowed `sellTo` tokens return\n@return (tokenReturn) How much `sellTo` tokens were transferred",
            "id": 8779,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8704,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8703,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "10243:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10243:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8706,
                    "name": "_sellTo",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8697,
                    "src": "10266:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8707,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8705,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "10257:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10257:17:26"
              }
            ],
            "name": "sell",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8697,
                  "name": "_sellTo",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10161:13:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8696,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "10161:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8699,
                  "name": "_gdAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10184:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10184:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8701,
                  "name": "_minReturn",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10211:18:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10211:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10151:84:26"
            },
            "returnParameters": {
              "id": 8710,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8709,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8779,
                  "src": "10284:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8708,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10284:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10283:9:26"
            },
            "scope": 9043,
            "src": "10138:987:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8791,
              "nodeType": "Block",
              "src": "11373:56:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8788,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8781,
                        "src": "11415:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8786,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "11390:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8787,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "currentPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7982,
                      "src": "11390:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view external returns (uint256)"
                      }
                    },
                    "id": 8789,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11390:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8785,
                  "id": 8790,
                  "nodeType": "Return",
                  "src": "11383:39:26"
                }
              ]
            },
            "documentation": "@dev Current price of GD in `token`. currently only cDAI is supported.\n@param _token The desired reserve token to have\n@return price of GD",
            "id": 8792,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "currentPrice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8781,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11329:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8780,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "11329:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11328:14:26"
            },
            "returnParameters": {
              "id": 8785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8784,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8792,
                  "src": "11364:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8783,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11364:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11363:9:26"
            },
            "scope": 9043,
            "src": "11307:122:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8805,
              "nodeType": "Block",
              "src": "11707:68:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8800,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "11741:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8797,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "11724:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11724:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "11724:16:26",
                        "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": 8801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11724:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 8802,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "11758:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11724:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 8796,
                  "id": 8804,
                  "nodeType": "Return",
                  "src": "11717:51:26"
                }
              ]
            },
            "documentation": "@dev Checks if enough blocks have passed so it would be possible to\nexecute `mintInterestAndUBI` according to the length of `blockInterval`\n@return (bool) True if enough blocks have passed",
            "id": 8806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "canMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11677:2:26"
            },
            "returnParameters": {
              "id": 8796,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8795,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8806,
                  "src": "11701:4:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 8794,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11701:4:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11700:6:26"
            },
            "scope": 9043,
            "src": "11661:114:26",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8945,
              "nodeType": "Block",
              "src": "12611:1074:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 8827,
                          "name": "canMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8806,
                          "src": "12629:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 8828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12629:9:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e65656420746f207761697420666f7220746865206e65787420696e74657276616c",
                        "id": 8829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12640:36:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        },
                        "value": "Need to wait for the next interval"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b2926b938aae9e3d3391834a8a3f967955ec6bac9d9b401e186c29404478d446",
                          "typeString": "literal_string \"Need to wait for the next interval\""
                        }
                      ],
                      "id": 8826,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "12621:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12621:56:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8831,
                  "nodeType": "ExpressionStatement",
                  "src": "12621:56:26"
                },
                {
                  "assignments": [
                    8833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8833,
                      "name": "price",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12687:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12687:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8837,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8835,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12716:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "id": 8834,
                      "name": "currentPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8792,
                      "src": "12703:12:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) view returns (uint256)"
                      }
                    },
                    "id": 8836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12703:28:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12687:44:26"
                },
                {
                  "assignments": [
                    8839
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8839,
                      "name": "gdInterestToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12741:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8838,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12741:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8845,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8842,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "12793:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8843,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "12809:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8840,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "12768:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintInterest",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8105,
                      "src": "12768:24:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20,uint256) external returns (uint256)"
                      }
                    },
                    "id": 8844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12768:53:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12741:80:26"
                },
                {
                  "assignments": [
                    8847
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8847,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12831:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8846,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "12831:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8855,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8850,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "12874:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "12874:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8852,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12874:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12866:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12866:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8848,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "12855:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12855:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12831:65:26"
                },
                {
                  "assignments": [
                    8857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8857,
                      "name": "precisionLoss",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12906:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8856,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12906:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8868,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8863,
                                "name": "gooddollar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8847,
                                "src": "12954:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_GoodDollar_$3767",
                                  "typeString": "contract GoodDollar"
                                }
                              },
                              "id": 8864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "decimals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3397,
                              "src": "12954:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                "typeString": "function () view external returns (uint256)"
                              }
                            },
                            "id": 8865,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12954:21:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8862,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12946:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12946:30:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 8859,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12938:2:26",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            }
                          ],
                          "id": 8858,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12930:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": "uint256"
                        },
                        "id": 8860,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12930:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8861,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "12930:15:26",
                      "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": 8867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12930:47:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12906:71:26"
                },
                {
                  "assignments": [
                    8870
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8870,
                      "name": "gdInterest",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "12987:18:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8869,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12987:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8878,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3130",
                          "id": 8876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13035:2:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_10_by_1",
                            "typeString": "int_const 10"
                          },
                          "value": "10"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 8877,
                          "name": "precisionLoss",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8857,
                          "src": "13039:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13035:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8872,
                            "name": "_interest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8812,
                            "src": "13013:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 8873,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8833,
                            "src": "13024:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 8871,
                          "name": "rdiv",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 247,
                          "src": "13008:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 8874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13008:22:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21239,
                      "src": "13008:26:26",
                      "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": 8879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13008:45:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12987:66:26"
                },
                {
                  "assignments": [
                    8882
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8882,
                      "name": "gdExpansionToMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13063:25:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8881,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13063:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8887,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8885,
                        "name": "_interestToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8808,
                        "src": "13117:14:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_ERC20_$21849",
                          "typeString": "contract ERC20"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8883,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "13091:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 8884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mintExpansion",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8273,
                      "src": "13091:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$21849_$returns$_t_uint256_$",
                        "typeString": "function (contract ERC20) external returns (uint256)"
                      }
                    },
                    "id": 8886,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13091:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13063:69:26"
                },
                {
                  "assignments": [
                    8889
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8889,
                      "name": "gdUBI",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13142:13:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8888,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13142:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8894,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8892,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13179:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8890,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13158:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8891,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21263,
                      "src": "13158:20:26",
                      "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": 8893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13158:32:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13142:48:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8895,
                      "name": "gdUBI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8889,
                      "src": "13200:5:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8898,
                          "name": "gdExpansionToMint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8882,
                          "src": "13218:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 8896,
                          "name": "gdUBI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8889,
                          "src": "13208:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21287,
                        "src": "13208:9:26",
                        "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": 8899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13208:28:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13200:36:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8901,
                  "nodeType": "ExpressionStatement",
                  "src": "13200:36:26"
                },
                {
                  "assignments": [
                    8903
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8903,
                      "name": "toMint",
                      "nodeType": "VariableDeclaration",
                      "scope": 8945,
                      "src": "13246:14:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8902,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13246:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8908,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8906,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13273:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8904,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13263:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 8905,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21287,
                      "src": "13263:9:26",
                      "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": 8907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13263:21:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13246:38:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8917,
                        "name": "fundManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8360,
                        "src": "13344:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8918,
                        "name": "toMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8903,
                        "src": "13357:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 8911,
                                    "name": "avatar",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 861,
                                    "src": "13316:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Avatar_$12705",
                                      "typeString": "contract Avatar"
                                    }
                                  },
                                  "id": 8912,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "nativeToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 12441,
                                  "src": "13316:18:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                    "typeString": "function () view external returns (contract DAOToken)"
                                  }
                                },
                                "id": 8913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13316:20:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_DAOToken_$14470",
                                  "typeString": "contract DAOToken"
                                }
                              ],
                              "id": 8910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13308:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 8914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13308:29:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 8909,
                          "name": "ERC20Mintable",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21966,
                          "src": "13294:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ERC20Mintable_$21966_$",
                            "typeString": "type(contract ERC20Mintable)"
                          }
                        },
                        "id": 8915,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13294:44:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Mintable_$21966",
                          "typeString": "contract ERC20Mintable"
                        }
                      },
                      "id": 8916,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21965,
                      "src": "13294:49:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,uint256) external returns (bool)"
                      }
                    },
                    "id": 8919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13294:70:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 8920,
                  "nodeType": "ExpressionStatement",
                  "src": "13294:70:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 8921,
                      "name": "lastMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8364,
                      "src": "13374:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8925,
                          "name": "blockInterval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8362,
                          "src": "13404:13:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 8922,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22161,
                            "src": "13387:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 8923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "number",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "13387:12:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "div",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 21239,
                        "src": "13387:16:26",
                        "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": 8926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13387:31:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13374:44:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8928,
                  "nodeType": "ExpressionStatement",
                  "src": "13374:44:26"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8930,
                        "name": "lastMinted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8364,
                        "src": "13456:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8932,
                            "name": "_interestToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8808,
                            "src": "13488:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 8931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13480:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13480:23:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8934,
                        "name": "_transfered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8810,
                        "src": "13517:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8935,
                        "name": "gdInterestToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8839,
                        "src": "13542:16:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8936,
                        "name": "gdExpansionToMint",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8882,
                        "src": "13572:17:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8937,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13603:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8938,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13627:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8929,
                      "name": "UBIMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8445,
                      "src": "13433:9:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,uint256,uint256,uint256,uint256,uint256)"
                      }
                    },
                    "id": 8939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13433:209:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8940,
                  "nodeType": "EmitStatement",
                  "src": "13428:214:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 8941,
                        "name": "gdInterest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8870,
                        "src": "13660:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 8942,
                        "name": "gdUBI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8889,
                        "src": "13672:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 8943,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "13659:19:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 8825,
                  "id": 8944,
                  "nodeType": "Return",
                  "src": "13652:26:26"
                }
              ]
            },
            "documentation": "@dev Anyone can call this to trigger calculations.\nReserve sends UBI to Avatar DAO and returns interest to FundManager.\n@param _interestToken The token that was transfered to the reserve\n@param _transfered How much was transfered to the reserve for UBI in `_interestToken`\n@param _interest Out of total transfered how much is the interest (in `_interestToken`)\nthat needs to be paid back (some interest might be donated)\n@return (gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted",
            "id": 8946,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8815,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8814,
                  "name": "requireActive",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 882,
                  "src": "12501:13:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12501:13:26"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 8817,
                    "name": "_interestToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8808,
                    "src": "12532:14:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  }
                ],
                "id": 8818,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8816,
                  "name": "onlyCDai",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8395,
                  "src": "12523:8:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_contract$_ERC20_$21849_$",
                    "typeString": "modifier (contract ERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12523:24:26"
              },
              {
                "arguments": null,
                "id": 8820,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8819,
                  "name": "onlyFundManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 8378,
                  "src": "12556:15:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12556:15:26"
              }
            ],
            "name": "mintInterestAndUBI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8808,
                  "name": "_interestToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12395:20:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 8807,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "12395:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8810,
                  "name": "_transfered",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12425:19:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8809,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12425:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8812,
                  "name": "_interest",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12454:17:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8811,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12454:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12385:92:26"
            },
            "returnParameters": {
              "id": 8825,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8822,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12589:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8821,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12589:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8824,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 8946,
                  "src": "12598:7:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12598:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12588:18:26"
            },
            "scope": 9043,
            "src": "12358:1327:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9017,
              "nodeType": "Block",
              "src": "14043:610:26",
              "statements": [
                {
                  "assignments": [
                    8952
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8952,
                      "name": "remainingReserve",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14118:24:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8951,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14118:7:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 8956,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22311,
                            "src": "14168:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                              "typeString": "contract GoodReserveCDai"
                            }
                          ],
                          "id": 8955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14160:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14160:13:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8953,
                        "name": "cDai",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8356,
                        "src": "14145:4:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_cERC20_$8327",
                          "typeString": "contract cERC20"
                        }
                      },
                      "id": 8954,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8317,
                      "src": "14145:14:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 8958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14145:29:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14118:56:26"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 8962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 8960,
                      "name": "remainingReserve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8952,
                      "src": "14188:16:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 8961,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14207:1:26",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14188:20:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 8975,
                  "nodeType": "IfStatement",
                  "src": "14184:178:26",
                  "trueBody": {
                    "id": 8974,
                    "nodeType": "Block",
                    "src": "14210:152:26",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 8967,
                                      "name": "avatar",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 861,
                                      "src": "14271:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Avatar_$12705",
                                        "typeString": "contract Avatar"
                                      }
                                    ],
                                    "id": 8966,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14263:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 8968,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14263:15:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 8969,
                                  "name": "remainingReserve",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8952,
                                  "src": "14280:16:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 8964,
                                  "name": "cDai",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8356,
                                  "src": "14249:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_cERC20_$8327",
                                    "typeString": "contract cERC20"
                                  }
                                },
                                "id": 8965,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 8326,
                                "src": "14249:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 8970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14249:48:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "63646169207472616e73666572206661696c6564",
                              "id": 8971,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14315:22:26",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              },
                              "value": "cdai transfer failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_ee6fcf4e0c6a3f3ba08a53c912b0652776da731b8ba529f52dfcb696ea92b55b",
                                "typeString": "literal_string \"cdai transfer failed\""
                              }
                            ],
                            "id": 8963,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              22174,
                              22175
                            ],
                            "referencedDeclaration": 22175,
                            "src": "14224:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 8972,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14224:127:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 8973,
                        "nodeType": "ExpressionStatement",
                        "src": "14224:127:26"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 8984,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 8980,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22311,
                                  "src": "14402:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                    "typeString": "contract GoodReserveCDai"
                                  }
                                ],
                                "id": 8979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14394:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 8981,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14394:13:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 8977,
                              "name": "cDai",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8356,
                              "src": "14379:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_cERC20_$8327",
                                "typeString": "contract cERC20"
                              }
                            },
                            "id": 8978,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 8317,
                            "src": "14379:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 8982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14379:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 8983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14412:1:26",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14379:34:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "46756e6473207472616e7366657220686173206661696c6564",
                        "id": 8985,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14415:27:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        },
                        "value": "Funds transfer has failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c43d2089fde162746b7f79ca82a944c5d81589be0a9addf7c07e40869d26592",
                          "typeString": "literal_string \"Funds transfer has failed\""
                        }
                      ],
                      "id": 8976,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14371:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 8986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14371:72:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8987,
                  "nodeType": "ExpressionStatement",
                  "src": "14371:72:26"
                },
                {
                  "assignments": [
                    8989
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8989,
                      "name": "gooddollar",
                      "nodeType": "VariableDeclaration",
                      "scope": 9017,
                      "src": "14453:21:26",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_GoodDollar_$3767",
                        "typeString": "contract GoodDollar"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 8988,
                        "name": "GoodDollar",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 3767,
                        "src": "14453:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8997,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 8992,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14496:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              },
                              "id": 8993,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "nativeToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 12441,
                              "src": "14496:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_DAOToken_$14470_$",
                                "typeString": "function () view external returns (contract DAOToken)"
                              }
                            },
                            "id": 8994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14496:20:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_DAOToken_$14470",
                              "typeString": "contract DAOToken"
                            }
                          ],
                          "id": 8991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14488:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 8995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14488:29:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 8990,
                      "name": "GoodDollar",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3767,
                      "src": "14477:10:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_GoodDollar_$3767_$",
                        "typeString": "type(contract GoodDollar)"
                      }
                    },
                    "id": 8996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14477:41:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_GoodDollar_$3767",
                      "typeString": "contract GoodDollar"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14453:65:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9002,
                            "name": "avatar",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 861,
                            "src": "14566:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_Avatar_$12705",
                              "typeString": "contract Avatar"
                            }
                          ],
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "14558:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 9003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14558:15:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 8998,
                        "name": "marketMaker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8358,
                        "src": "14528:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodMarketMaker_$8274",
                          "typeString": "contract GoodMarketMaker"
                        }
                      },
                      "id": 9000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 21393,
                      "src": "14528:29:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 9004,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14528:46:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9005,
                  "nodeType": "ExpressionStatement",
                  "src": "14528:46:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9006,
                        "name": "gooddollar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8989,
                        "src": "14584:10:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_GoodDollar_$3767",
                          "typeString": "contract GoodDollar"
                        }
                      },
                      "id": 9008,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "renounceMinter",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20811,
                      "src": "14584:25:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 9009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14584:27:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9010,
                  "nodeType": "ExpressionStatement",
                  "src": "14584:27:26"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9014,
                        "name": "avatar",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 861,
                        "src": "14639:6:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_Avatar_$12705",
                          "typeString": "contract Avatar"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9011,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22312,
                        "src": "14621:5:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_GoodReserveCDai_$9043",
                          "typeString": "contract super GoodReserveCDai"
                        }
                      },
                      "id": 9013,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "internalEnd",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1003,
                      "src": "14621:17:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_Avatar_$12705_$returns$__$",
                        "typeString": "function (contract Avatar)"
                      }
                    },
                    "id": 9015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14621:25:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9016,
                  "nodeType": "ExpressionStatement",
                  "src": "14621:25:26"
                }
              ]
            },
            "documentation": "@dev Making the contract inactive after it has transferred the cDAI funds to `_avatar`\nand has transferred the market maker ownership to `_avatar`. Inactive means that\nbuy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can\nexecutes this method",
            "id": 9018,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8949,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8948,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14032:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14032:10:26"
              }
            ],
            "name": "end",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 8947,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14022:2:26"
            },
            "returnParameters": {
              "id": 8950,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14043:0:26"
            },
            "scope": 9043,
            "src": "14010:643:26",
            "stateMutability": "nonpayable",
            "superFunction": 979,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9041,
              "nodeType": "Block",
              "src": "14844:152:26",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 9029,
                                "name": "avatar",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 861,
                                "src": "14899:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Avatar_$12705",
                                  "typeString": "contract Avatar"
                                }
                              ],
                              "id": 9028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14891:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 9030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14891:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 9034,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22311,
                                    "src": "14933:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_GoodReserveCDai_$9043",
                                      "typeString": "contract GoodReserveCDai"
                                    }
                                  ],
                                  "id": 9033,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14925:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 9035,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14925:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 9031,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9020,
                                "src": "14908:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$21849",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 9032,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 21458,
                              "src": "14908:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 9036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14908:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9026,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9020,
                            "src": "14875:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$21849",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 9027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 21493,
                          "src": "14875:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 9037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14875:65:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "7265636f766572207472616e73666572206661696c6564",
                        "id": 9038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14954:25:26",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        },
                        "value": "recover transfer failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_41a03013a5674cc54e9badb52c47e3c4670bc54fa0765e5276b5118633f8aeb3",
                          "typeString": "literal_string \"recover transfer failed\""
                        }
                      ],
                      "id": 9025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22175,
                      "src": "14854:7:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9039,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14854:135:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9040,
                  "nodeType": "ExpressionStatement",
                  "src": "14854:135:26"
                }
              ]
            },
            "documentation": "@dev method to recover any stuck erc20 tokens (ie compound COMP)\n@param _token the ERC20 token to recover",
            "id": 9042,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9023,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9022,
                  "name": "onlyAvatar",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1325,
                  "src": "14833:10:26",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14833:10:26"
              }
            ],
            "name": "recover",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9020,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 9042,
                  "src": "14812:12:26",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$21849",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 9019,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 21849,
                    "src": "14812:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$21849",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14811:14:26"
            },
            "returnParameters": {
              "id": 9024,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14844:0:26"
            },
            "scope": 9043,
            "src": "14795:201:26",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 9044,
        "src": "1355:13643:26"
      }
    ],
    "src": "0:14999:26"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.296Z",
  "devdoc": {
    "methods": {
      "buy(address,uint256,uint256)": {
        "details": "Converts `buyWith` tokens to GD tokens and updates the bonding curve params. `buy` occurs only if the GD return is above the given minimum. It is possible to buy only with cDAI and when the contract is set to active. MUST call to `buyWith` `approve` prior this action to allow this contract to accomplish the conversion.",
        "params": {
          "_buyWith": "The tokens that should be converted to GD tokens",
          "_minReturn": "The minimum allowed return in GD tokens",
          "_tokenAmount": "The amount of `buyWith` tokens that should be converted to GD tokens"
        },
        "return": "(gdReturn) How much GD tokens were transferred"
      },
      "canMint()": {
        "details": "Checks if enough blocks have passed so it would be possible to execute `mintInterestAndUBI` according to the length of `blockInterval`",
        "return": "(bool) True if enough blocks have passed"
      },
      "constructor": {
        "details": "Constructor",
        "params": {
          "_avatar": "The avatar of the DAO",
          "_blockInterval": "How many blocks should be passed before the next execution of `mintInterestAndUBI`",
          "_cDai": "The address of cDAI",
          "_contribution": "The address of the contribution contract",
          "_dai": "The address of DAI",
          "_fundManager": "The address of the fund manager contract",
          "_identity": "The identity contract",
          "_marketMaker": "The address of the market maker contract"
        }
      },
      "currentPrice(address)": {
        "details": "Current price of GD in `token`. currently only cDAI is supported.",
        "params": {
          "_token": "The desired reserve token to have"
        },
        "return": "price of GD"
      },
      "end()": {
        "details": "Making the contract inactive after it has transferred the cDAI funds to `_avatar` and has transferred the market maker ownership to `_avatar`. Inactive means that buy / sell / mintInterestAndUBI actions will no longer be active. Only the Avatar can executes this method"
      },
      "isOwner()": {
        "return": "true if `msg.sender` is the owner of the contract."
      },
      "isRegistered()": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "isRegistered(address)": {
        "details": "function to see if an avatar has been set and if this scheme is registered",
        "return": "true if scheme is registered"
      },
      "mintInterestAndUBI(address,uint256,uint256)": {
        "details": "Anyone can call this to trigger calculations. Reserve sends UBI to Avatar DAO and returns interest to FundManager.",
        "params": {
          "_interest": "Out of total transfered how much is the interest (in `_interestToken`) that needs to be paid back (some interest might be donated)",
          "_interestToken": "The token that was transfered to the reserve",
          "_transfered": "How much was transfered to the reserve for UBI in `_interestToken`"
        },
        "return": "(gdInterest, gdUBI) How much GD interest was minted and how much GD UBI was minted"
      },
      "owner()": {
        "return": "the address of the owner."
      },
      "recover(address)": {
        "details": "method to recover any stuck erc20 tokens (ie compound COMP)",
        "params": {
          "_token": "the ERC20 token to recover"
        }
      },
      "renounceOwnership()": {
        "details": "Allows the current owner to relinquish control of the contract."
      },
      "sell(address,uint256,uint256)": {
        "details": "Converts GD tokens to `sellTo` tokens and update the bonding curve params. `sell` occurs only if the token return is above the given minimum. Notice that there is a contribution amount from the given GD that remains in the reserve. It is only possible to sell to cDAI and only when the contract is set to active. MUST be called to G$ `approve` prior to this action to allow this contract to accomplish the conversion.",
        "params": {
          "_gdAmount": "The amount of GD tokens that should be converted to `_sellTo` tokens",
          "_minReturn": "The minimum allowed `sellTo` tokens return",
          "_sellTo": "The tokens that will be received after the conversion"
        },
        "return": "(tokenReturn) How much `sellTo` tokens were transferred"
      },
      "setAvatar(address)": {
        "details": "Function to set a new avatar and controller for scheme can only be done by owner of scheme"
      },
      "setBlockInterval(uint256)": {
        "details": "Allows the DAO to change the block interval",
        "params": {
          "_blockInterval": "the new value"
        }
      },
      "setContributionAddress(address)": {
        "details": "Allows the DAO to change the contribution formula contract",
        "params": {
          "_contribution": "address of the new contribution contract"
        }
      },
      "setFundManager(address)": {
        "details": "Allows the DAO to change the fund manager contract",
        "params": {
          "_fundManager": "address of the new contract"
        }
      },
      "setMarketMaker(address)": {
        "details": "Allows the DAO to change the market maker contract",
        "params": {
          "_marketMaker": "address of the new contract"
        }
      },
      "start()": {
        "details": "Start function. Adds this contract to identity as a feeless scheme. Can only be called if scheme is registered"
      },
      "transferOwnership(address)": {
        "details": "Allows the current owner to transfer control of the contract to a newOwner.",
        "params": {
          "newOwner": "The address to transfer ownership to."
        }
      }
    },
    "title": "Reserve based on cDAI and dynamic reserve ratio market maker"
  },
  "userdoc": {
    "methods": {
      "renounceOwnership()": {
        "notice": "Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore."
      }
    }
  }
}