{
  "contractName": "FutarchyOracle",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "LONG",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "winningMarketIndex",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "masterCopy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "markets",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "categoricalEvent",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isSet",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tradingPeriod",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "funding",
          "type": "uint256"
        }
      ],
      "name": "FutarchyFunding",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "FutarchyClosing",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "winningMarketIndex",
          "type": "uint256"
        }
      ],
      "name": "OutcomeAssignment",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "funding",
          "type": "uint256"
        }
      ],
      "name": "fund",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "close",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "setOutcome",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOutcomeSet",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getOutcome",
      "outputs": [
        {
          "name": "",
          "type": "int256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.6+commit.b259423e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"setOutcome\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"close\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"LONG\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"winningMarketIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOutcome\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"masterCopy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"markets\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"categoricalEvent\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isSet\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"funding\",\"type\":\"uint256\"}],\"name\":\"fund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOutcomeSet\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tradingPeriod\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"funding\",\"type\":\"uint256\"}],\"name\":\"FutarchyFunding\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FutarchyClosing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"winningMarketIndex\",\"type\":\"uint256\"}],\"name\":\"OutcomeAssignment\",\"type\":\"event\"}],\"devdoc\":{\"author\":\"Stefan George - <stefan@gnosis.pm>\",\"methods\":{\"close()\":{\"details\":\"Closes market for winning outcome and redeems winnings and sends all collateral tokens to creator\"},\"fund(uint256)\":{\"details\":\"Funds all markets with equal amount of funding\",\"params\":{\"funding\":\"Amount of funding\"}},\"getOutcome()\":{\"details\":\"Returns winning outcome\",\"return\":\"Outcome\"},\"isOutcomeSet()\":{\"details\":\"Returns if winning outcome is set\",\"return\":\"Is outcome set?\"},\"setOutcome()\":{\"details\":\"Allows to set the oracle outcome based on the market with largest long position\"}},\"title\":\"Futarchy oracle contract - Allows to create an oracle based on market behaviour\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/FutarchyOracle.sol\":\"FutarchyOracle\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/CategoricalEvent.sol\":{\"keccak256\":\"0x0d618ff0e76444e82eb38603d60798a2ca697ca0262ef541ed0987503ed493da\",\"urls\":[\"bzzr://a8677480e10d1c369ab348a093598f84d85a51f400d114ece3d1d5055a09267a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/Event.sol\":{\"keccak256\":\"0xdcacfa25145426b5681ad7d8bafb3c117c92a37b7a0175d72a10b42f130fb8c1\",\"urls\":[\"bzzr://bd10fbdb82f0d50866442c9e95317b3176c8ee067def27d764529973fb36420a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol\":{\"keccak256\":\"0xd9c190f46a1f260cb6ca7aa455444cb79f4d0e732bbaa4485e36e7b6c344739c\",\"urls\":[\"bzzr://f84bccd78e77be6288cf97d3fc0cb4808d161f75d291b89df3f2232d394082f0\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/ScalarEvent.sol\":{\"keccak256\":\"0xb8113f1a3f63ec0b6ae2d1a833fbffcf2b2af9470d4d7591d8e2c2784a163b32\",\"urls\":[\"bzzr://feb468d84fdda273585ba31abbbf8cceb906df5a9142695ec30c98f000a05bd4\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/MarketMakers/MarketMaker.sol\":{\"keccak256\":\"0xa71f8ce92412033d0900d44c01f0702aefced87d860cf116c6a4d3efe86913cf\",\"urls\":[\"bzzr://63c5bf60b931bb032fcab23514a3db171b680b11d8c6c05ac8caa88752e3be41\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/Market.sol\":{\"keccak256\":\"0x7bc1ebf0ea0f4cd9b6e9bfff6c6ac9088c253bcfca4e27f31e5845799f0278d8\",\"urls\":[\"bzzr://5e3f86d96ab269d284b34563501469d539cc436d62f070dd0abda2519d5e60c0\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/StandardMarket.sol\":{\"keccak256\":\"0x527abf1b0997e2d38ce3c97f7ed647b9e913424828594287e2b068f2fb41ad4c\",\"urls\":[\"bzzr://16756e1b212fd40f21de50d99c8b7a5dde0acc2b0b047af8beead831a1274bd7\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/StandardMarketWithPriceLogger.sol\":{\"keccak256\":\"0xac611de823e324e444a9749619091be1f81edfd67af6109581c2f8655251fb8e\",\"urls\":[\"bzzr://feb7902d610a1e499e0330780e0e9638d4372ad941e5d5896cb1730df791405a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/StandardMarketWithPriceLoggerFactory.sol\":{\"keccak256\":\"0x81f233b1b25619bf83726af248a65e713660eb817098af83874cd93fddc7a4c4\",\"urls\":[\"bzzr://c37407f5fdc24b6fdcc5b7fad83b99da925ee9dcf0c4da1c8f4c7a7a4afe69a2\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/FutarchyOracle.sol\":{\"keccak256\":\"0x1873d44361476b4aec9203cf43db48690eebf9c1bb91ebc1730bed8b8d4ea072\",\"urls\":[\"bzzr://f5563fc2b82e53157b49f06d61333cf3cd9f4a9e7cf60237f53549241d3b4d3a\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol\":{\"keccak256\":\"0xf4d12f4a59c17e66dfa6791188f621a8914e2038a4e3f72d6fc9fb903ca8e18e\",\"urls\":[\"bzzr://a477ccd203e677cc904b1a4f8fcc85251c5b5e09c5c10eed27e01318584b16d1\"]},\"/home/alan/src/github.com/gnosis/pm-contracts/contracts/Tokens/OutcomeToken.sol\":{\"keccak256\":\"0x3d4c9ec14a60cf7577d366da5116e919a4331da8d6d993174f7d599f84ae74e0\",\"urls\":[\"bzzr://20f87450259a3af24ff1769faa9ab3b714d01921e9d8fa4efa75a0c277837a8a\"]},\"@gnosis.pm/util-contracts/contracts/Proxy.sol\":{\"keccak256\":\"0xeab0e83a9ec9e7f052c0455a11577061ec6d1994db08dae429abd6faaabf6555\",\"urls\":[\"bzzr://b2c1273d4ec30e2f9e768eea8c510f8493a7359b03e01923d93eea86b57ec145\"]},\"openzeppelin-solidity/contracts/drafts/SignedSafeMath.sol\":{\"keccak256\":\"0xb4b45cd5475c318722ac0f8d7e2b9e77fee6f4f36374c1110fe615d50fbc0650\",\"urls\":[\"bzzr://a90fb457269c8a03ec5b811c71acef08a2751a4d2019b0661328610f9357dae7\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x4ccf2d7b51873db1ccfd54ca2adae5eac3b184f9699911ed4490438419f1c690\",\"urls\":[\"bzzr://1604f5b6d6e916c154efd8c6720cda069e5ba32dfa0a9dedf2b42e5b02d07f89\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x852793a3c2f86d336a683b30d688ec3dcfc57451af5a2bf5975cda3b7191a901\",\"urls\":[\"bzzr://07fb42206812a17c1f71e548cfa5cec6f9aa1ae0ca5df870718ca4aa9759d1a5\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x90e8c2521653bbb1768b05889c5760031e688d9cd361f167489b89215e201b95\",\"urls\":[\"bzzr://aa8b45b57edafc3d67bc5d916327ea16807fae33f753ca163ae0c4061b789766\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b506115b3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1283e7711610071578063b1283e7714610177578063c3730d03146101e5578063c65fb3801461022f578063ca1d209d14610251578063ccdf68f31461027f578063f86e3153146102a1576100b4565b80630537665d146100b957806343d726d6146100c3578063561cce0a146100cd57806356cfb75f146100f15780637e7e4b471461010f578063a619486e1461012d575b600080fd5b6100c16102bf565b005b6100cb6105b8565b005b6100d5610daf565b604051808260ff1660ff16815260200191505060405180910390f35b6100f9610db4565b6040518082815260200191505060405180910390f35b610117610dba565b6040518082815260200191505060405180910390f35b610135610dc4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a36004803603602081101561018d57600080fd5b8101908080359060200190929190505050610de9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ed610e25565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610237610e4b565b604051808215151515815260200191505060405180910390f35b61027d6004803603602081101561026757600080fd5b8101908080359060200190929190505050610e5e565b005b61028761156a565b604051808215151515815260200191505060405180910390f35b6102a9611581565b6040518082815260200191505060405180910390f35b600660009054906101000a900460ff1615801561039757504260045460026000815481106102e957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b97bc866040518163ffffffff1660e01b815260040160206040518083038186803b15801561035957600080fd5b505afa15801561036d573d6000803e3d6000fd5b505050506040513d602081101561038357600080fd5b810190808051906020019092919050505001105b6103a057600080fd5b600060026000815481106103b057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f01e66ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d602081101561044a57600080fd5b8101908080519060200190929190505050905060008090506000600190505b6002805490508160ff16101561055857600060028260ff168154811061048b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f01e66ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d602081101561052557600080fd5b810190808051906020019092919050505090508381111561054a578093508160ff1692505b508080600101915050610469565b50806005819055506001600660006101000a81548160ff0219169083151502179055507f39972cb21edd888c2061a2b4b37874524bbc055cfeaa3054682ba5369f5029aa6005546040518082815260200191505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061257600080fd5b6000600261061e610dba565b8154811061062857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106bd57600080fd5b505afa1580156106d1573d6000803e3d6000fd5b505050506040513d60208110156106e757600080fd5b8101908080519060200190929190505050801561080157508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b15801561074557600080fd5b505afa158015610759573d6000803e3d6000fd5b505050506040513d602081101561076f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b81019080805190602001909291905050505b61080a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166343d726d66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108b057600080fd5b505afa1580156108c4573d6000803e3d6000fd5b505050506040513d60208110156108da57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663ad0b2bec6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561093257600080fd5b505af1158015610946573d6000803e3d6000fd5b505050506040513d602081101561095c57600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff1663476343ee6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad0b2bec6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a5c57600080fd5b505af1158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610be157600080fd5b505afa158015610bf5573d6000803e3d6000fd5b505050506040513d6020811015610c0b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c9857600080fd5b505afa158015610cac573d6000803e3d6000fd5b505050506040513d6020811015610cc257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b8101908080519060200190929190505050610d8057600080fd5b7f5f5592c20f009bc231fd8491ce6ff3d11f2067fd2bd08c2a9999391a09b67dd460405160405180910390a150565b600181565b60055481565b6000600554905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028181548110610df657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb857600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d6020811015610f4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b505050506040513d602081101561106157600080fd5b810190808051906020019092919050505080156112005750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d602081101561110b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d60208110156111ee57600080fd5b81019080805190602001909291905050505b61120957600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328da850b826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505060008090505b6002805490508160ff16101561152f57600060028260ff16815481106112be57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b1580156113b157600080fd5b505afa1580156113c5573d6000803e3d6000fd5b505050506040513d60208110156113db57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663095ea7b382856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505050506040513d602081101561149c57600080fd5b81019080805190602001909291905050506114b657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663ca1d209d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561150957600080fd5b505af115801561151d573d6000803e3d6000fd5b5050505050808060010191505061129c565b507f8b8d4001f25800969052b4c8925891e8acbe35d672701edb74e52265fed9786e816040518082815260200191505060405180910390a150565b6000600660009054906101000a900460ff16905090565b6004548156fea165627a7a72305820eb2b0c351bb12103f2fb073fbd822edfee4893d75a0a39e76444c5d8b77f16b90029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b1283e7711610071578063b1283e7714610177578063c3730d03146101e5578063c65fb3801461022f578063ca1d209d14610251578063ccdf68f31461027f578063f86e3153146102a1576100b4565b80630537665d146100b957806343d726d6146100c3578063561cce0a146100cd57806356cfb75f146100f15780637e7e4b471461010f578063a619486e1461012d575b600080fd5b6100c16102bf565b005b6100cb6105b8565b005b6100d5610daf565b604051808260ff1660ff16815260200191505060405180910390f35b6100f9610db4565b6040518082815260200191505060405180910390f35b610117610dba565b6040518082815260200191505060405180910390f35b610135610dc4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101a36004803603602081101561018d57600080fd5b8101908080359060200190929190505050610de9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101ed610e25565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610237610e4b565b604051808215151515815260200191505060405180910390f35b61027d6004803603602081101561026757600080fd5b8101908080359060200190929190505050610e5e565b005b61028761156a565b604051808215151515815260200191505060405180910390f35b6102a9611581565b6040518082815260200191505060405180910390f35b600660009054906101000a900460ff1615801561039757504260045460026000815481106102e957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b97bc866040518163ffffffff1660e01b815260040160206040518083038186803b15801561035957600080fd5b505afa15801561036d573d6000803e3d6000fd5b505050506040513d602081101561038357600080fd5b810190808051906020019092919050505001105b6103a057600080fd5b600060026000815481106103b057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f01e66ec6040518163ffffffff1660e01b815260040160206040518083038186803b15801561042057600080fd5b505afa158015610434573d6000803e3d6000fd5b505050506040513d602081101561044a57600080fd5b8101908080519060200190929190505050905060008090506000600190505b6002805490508160ff16101561055857600060028260ff168154811061048b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f01e66ec6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d602081101561052557600080fd5b810190808051906020019092919050505090508381111561054a578093508160ff1692505b508080600101915050610469565b50806005819055506001600660006101000a81548160ff0219169083151502179055507f39972cb21edd888c2061a2b4b37874524bbc055cfeaa3054682ba5369f5029aa6005546040518082815260200191505060405180910390a15050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061257600080fd5b6000600261061e610dba565b8154811061062857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106bd57600080fd5b505afa1580156106d1573d6000803e3d6000fd5b505050506040513d60208110156106e757600080fd5b8101908080519060200190929190505050801561080157508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b15801561074557600080fd5b505afa158015610759573d6000803e3d6000fd5b505050506040513d602081101561076f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663ccdf68f36040518163ffffffff1660e01b815260040160206040518083038186803b1580156107c557600080fd5b505afa1580156107d9573d6000803e3d6000fd5b505050506040513d60208110156107ef57600080fd5b81019080805190602001909291905050505b61080a57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166343d726d66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561085257600080fd5b505af1158015610866573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b1580156108b057600080fd5b505afa1580156108c4573d6000803e3d6000fd5b505050506040513d60208110156108da57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663ad0b2bec6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561093257600080fd5b505af1158015610946573d6000803e3d6000fd5b505050506040513d602081101561095c57600080fd5b8101908080519060200190929190505050508073ffffffffffffffffffffffffffffffffffffffff1663476343ee6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109b657600080fd5b505af11580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad0b2bec6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610a5c57600080fd5b505af1158015610a70573d6000803e3d6000fd5b505050506040513d6020811015610a8657600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d6020811015610b2a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610be157600080fd5b505afa158015610bf5573d6000803e3d6000fd5b505050506040513d6020811015610c0b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c9857600080fd5b505afa158015610cac573d6000803e3d6000fd5b505050506040513d6020811015610cc257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b505050506040513d6020811015610d6657600080fd5b8101908080519060200190929190505050610d8057600080fd5b7f5f5592c20f009bc231fd8491ce6ff3d11f2067fd2bd08c2a9999391a09b67dd460405160405180910390a150565b600181565b60055481565b6000600554905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028181548110610df657fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eb857600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2057600080fd5b505afa158015610f34573d6000803e3d6000fd5b505050506040513d6020811015610f4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166323b872dd600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b505050506040513d602081101561106157600080fd5b810190808051906020019092919050505080156112005750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d602081101561110b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d60208110156111ee57600080fd5b81019080805190602001909291905050505b61120957600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328da850b826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561127e57600080fd5b505af1158015611292573d6000803e3d6000fd5b5050505060008090505b6002805490508160ff16101561152f57600060028260ff16815481106112be57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e274fd246040518163ffffffff1660e01b815260040160206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663b2016bd46040518163ffffffff1660e01b815260040160206040518083038186803b1580156113b157600080fd5b505afa1580156113c5573d6000803e3d6000fd5b505050506040513d60208110156113db57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663095ea7b382856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505050506040513d602081101561149c57600080fd5b81019080805190602001909291905050506114b657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663ca1d209d846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561150957600080fd5b505af115801561151d573d6000803e3d6000fd5b5050505050808060010191505061129c565b507f8b8d4001f25800969052b4c8925891e8acbe35d672701edb74e52265fed9786e816040518082815260200191505060405180910390a150565b6000600660009054906101000a900460ff16905090565b6004548156fea165627a7a72305820eb2b0c351bb12103f2fb073fbd822edfee4893d75a0a39e76444c5d8b77f16b90029",
  "sourceMap": "3006:3046:18:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3006:3046:18;;;;;;;",
  "deployedSourceMap": "3006:3046:18:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3006:3046:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4950:717;;;:::i;:::-;;4096:755;;;:::i;:::-;;436:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;654;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5927:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;205:25:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;525:46:18;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;525:46:18;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;577:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;690:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3243:736;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3243:736:18;;;;;;;;;;;;;;;;;:::i;:::-;;5752:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;623:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4950:717;5071:5;;;;;;;;;;;5070:6;:54;;;;;5121:3;5105:13;;5080:7;5088:1;5080:10;;;;;;;;;;;;;;;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5080:22:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5080:22:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5080:22:18;;;;;;;;;;;;;;;;:38;:44;5070:54;5062:63;;;;;;5210:20;5233:7;5241:1;5233:10;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5233:24:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5233:24:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5233:24:18;;;;;;;;;;;;;;;;5210:47;;5267:17;5287:1;5267:21;;5303:7;5313:1;5303:11;;5298:246;5320:7;:14;;;;5316:1;:18;;;5298:246;;;5355:13;5371:7;5379:1;5371:10;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5371:24:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5371:24:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5371:24:18;;;;;;;;;;;;;;;;5355:40;;5424:15;5413:8;:26;5409:125;;;5477:8;5459:26;;5518:1;5503:16;;;;5409:125;5298:246;5336:3;;;;;;;5298:246;;;;5574:12;5553:18;:33;;;;5604:4;5596:5;;:12;;;;;;;;;;;;;;;;;;5623:37;5641:18;;5623:37;;;;;;;;;;;;;;;;;;4950:717;;:::o;4096:755::-;846:7;;;;;;;;;;;832:21;;:10;:21;;;824:30;;;;;;4201:13;4217:7;4230:12;:10;:12::i;:::-;4217:27;;;;;;;;;;;;;;;;;;;;;;;;;4201:43;;4262:16;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4262:31:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4262:31:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4262:31:18;;;;;;;;;;;;;;;;:72;;;;;4297:6;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4297:22:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4297:22:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4297:22:18;;;;;;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4297:37:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4297:37:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4297:37:18;;;;;;;;;;;;;;;;4262:72;4254:81;;;;;;4439:6;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4439:14:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4439:14:18;;;;4463:6;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4463:22:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4463:22:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4463:22:18;;;;;;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4463:39:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4463:39:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4463:39:18;;;;;;;;;;;;;;;;;4512:6;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4512:21:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4512:21:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4512:21:18;;;;;;;;;;;;;;;;;4647:16;;;;;;;;;;;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4647:33:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4647:33:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4647:33:18;;;;;;;;;;;;;;;;;4698:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4698:34:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4698:34:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4698:34:18;;;;;;;;;;;;;;;;:43;;;4742:7;;;;;;;;;;;4751:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4751:34:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4751:34:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4751:34:18;;;;;;;;;;;;;;;;:44;;;4804:4;4751:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4751:59:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4751:59:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4751:59:18;;;;;;;;;;;;;;;;4698:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4698:113:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4698:113:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4698:113:18;;;;;;;;;;;;;;;;4690:122;;;;;;4827:17;;;;;;;;;;864:1;4096:755::o;436:30::-;465:1;436:30;:::o;654:::-;;;;:::o;5927:123::-;5994:3;6024:18;;6013:30;;5927:123;:::o;205:25:29:-;;;;;;;;;;;;;:::o;525:46:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;577:40::-;;;;;;;;;;;;;:::o;690:17::-;;;;;;;;;;;;;:::o;3243:736::-;846:7;;;;;;;;;;;832:21;;:10;:21;;;824:30;;;;;;3357:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3357:34:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3357:34:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3357:34:18;;;;;;;;;;;;;;;;:47;;;3405:7;;;;;;;;;;;3422:4;3429:7;3357:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3357:80:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3357:80:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3357:80:18;;;;;;;;;;;;;;;;:178;;;;;3457:16;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3457:34:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3457:34:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3457:34:18;;;;;;;;;;;;;;;;:42;;;3508:16;;;;;;;;;;;3527:7;3457:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3457:78:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3457:78:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3457:78:18;;;;;;;;;;;;;;;;3357:178;3346:190;;;;;;3546:16;;;;;;;;;;;:31;;;3578:7;3546:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3546:40:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3546:40:18;;;;3672:7;3682:1;3672:11;;3667:267;3689:7;:14;;;;3685:1;:18;;;3667:267;;;3724:13;3740:7;3748:1;3740:10;;;;;;;;;;;;;;;;;;;;;;;;;;;3724:26;;3814:6;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3814:22:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3814:22:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3814:22:18;;;;;;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3814:40:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3814:40:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3814:40:18;;;;;;;;;;;;;;;;:48;;;3871:6;3880:7;3814:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3814:74:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3814:74:18;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3814:74:18;;;;;;;;;;;;;;;;3806:83;;;;;;3903:6;:11;;;3915:7;3903:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3903:20:18;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3903:20:18;;;;3667:267;3705:3;;;;;;;3667:267;;;;3948:24;3964:7;3948:24;;;;;;;;;;;;;;;;;;3243:736;:::o;5752:108::-;5821:4;5848:5;;;;;;;;;;;5841:12;;5752:108;:::o;623:25::-;;;;:::o",
  "source": "pragma solidity ^0.5.0;\nimport \"../Oracles/Oracle.sol\";\nimport \"../Events/EventFactory.sol\";\nimport \"../Markets/StandardMarketWithPriceLoggerFactory.sol\";\nimport \"@gnosis.pm/util-contracts/contracts/Proxy.sol\";\n\n\ncontract FutarchyOracleData {\n\n    /*\n     *  Events\n     */\n    event FutarchyFunding(uint funding);\n    event FutarchyClosing();\n    event OutcomeAssignment(uint winningMarketIndex);\n\n    /*\n     *  Constants\n     */\n    uint8 public constant LONG = 1;\n\n    /*\n     *  Storage\n     */\n    address creator;\n    StandardMarketWithPriceLogger[] public markets;\n    CategoricalEvent public categoricalEvent;\n    uint public tradingPeriod;\n    uint public winningMarketIndex;\n    bool public isSet;\n\n    /*\n     *  Modifiers\n     */\n    modifier isCreator() {\n        // Only creator is allowed to proceed\n        require(msg.sender == creator);\n        _;\n    }\n}\n\ncontract FutarchyOracleProxy is Proxy, FutarchyOracleData {\n\n    /// @dev Constructor creates events and markets for futarchy oracle\n    /// @param _creator Oracle creator\n    /// @param eventFactory Event factory contract\n    /// @param collateralToken Tokens used as collateral in exchange for outcome tokens\n    /// @param oracle Oracle contract used to resolve the event\n    /// @param outcomeCount Number of event outcomes\n    /// @param lowerBound Lower bound for event outcome\n    /// @param upperBound Lower bound for event outcome\n    /// @param marketFactory Market factory contract\n    /// @param marketMaker Market maker contract\n    /// @param fee Market fee\n    /// @param _tradingPeriod Trading period before decision can be determined\n    /// @param startDate Start date for price logging\n    constructor(\n        address proxied,\n        address _creator,\n        EventFactory eventFactory,\n        ERC20 collateralToken,\n        Oracle oracle,\n        uint8 outcomeCount,\n        int lowerBound,\n        int upperBound,\n        StandardMarketWithPriceLoggerFactory marketFactory,\n        MarketMaker marketMaker,\n        uint24 fee,\n        uint _tradingPeriod,\n        uint startDate\n    )\n        Proxy(proxied)\n        public\n    {\n        // trading period is at least a second\n        require(_tradingPeriod > 0);\n        // Create decision event\n        categoricalEvent = eventFactory.createCategoricalEvent(collateralToken, Oracle(address(this)), outcomeCount);\n        // Create outcome events\n        for (uint8 i = 0; i < categoricalEvent.getOutcomeCount(); i++) {\n            ScalarEvent scalarEvent = eventFactory.createScalarEvent(\n                categoricalEvent.outcomeTokens(i),\n                oracle,\n                lowerBound,\n                upperBound\n            );\n            markets.push(marketFactory.createMarket(scalarEvent, marketMaker, fee, startDate));\n        }\n        creator = _creator;\n        tradingPeriod = _tradingPeriod;\n    }\n}\n\n/// @title Futarchy oracle contract - Allows to create an oracle based on market behaviour\n/// @author Stefan George - <stefan@gnosis.pm>\ncontract FutarchyOracle is Proxied, Oracle, FutarchyOracleData {\n    using SafeMath for *;\n\n    /*\n     *  Public functions\n     */\n    /// @dev Funds all markets with equal amount of funding\n    /// @param funding Amount of funding\n    function fund(uint funding)\n        public\n        isCreator\n    {\n        // Buy all outcomes\n        require(   categoricalEvent.collateralToken().transferFrom(creator, address(this), funding)\n                && categoricalEvent.collateralToken().approve(address(categoricalEvent), funding));\n        categoricalEvent.buyAllOutcomes(funding);\n        // Fund each market with outcome tokens from categorical event\n        for (uint8 i = 0; i < markets.length; i++) {\n            Market market = markets[i];\n            // Approve funding for market\n            require(market.eventContract().collateralToken().approve(address(market), funding));\n            market.fund(funding);\n        }\n        emit FutarchyFunding(funding);\n    }\n\n    /// @dev Closes market for winning outcome and redeems winnings and sends all collateral tokens to creator\n    function close()\n        public\n        isCreator\n    {\n        // Winning outcome has to be set\n        Market market = markets[uint(getOutcome())];\n        require(categoricalEvent.isOutcomeSet() && market.eventContract().isOutcomeSet());\n        // Close market and transfer all outcome tokens from winning outcome to this contract\n        market.close();\n        market.eventContract().redeemWinnings();\n        market.withdrawFees();\n        // Redeem collateral token for winning outcome tokens and transfer collateral tokens to creator\n        categoricalEvent.redeemWinnings();\n        require(categoricalEvent.collateralToken().transfer(creator, categoricalEvent.collateralToken().balanceOf(address(this))));\n        emit FutarchyClosing();\n    }\n\n    /// @dev Allows to set the oracle outcome based on the market with largest long position\n    function setOutcome()\n        public\n    {\n        // Outcome is not set yet and trading period is over\n        require(!isSet && markets[0].startDate() + tradingPeriod < now);\n        // Find market with highest marginal price for long outcome tokens\n        uint highestAvgPrice = markets[0].getAvgPrice();\n        uint highestIndex = 0;\n        for (uint8 i = 1; i < markets.length; i++) {\n            uint avgPrice = markets[i].getAvgPrice();\n            if (avgPrice > highestAvgPrice) {\n                highestAvgPrice = avgPrice;\n                highestIndex = i;\n            }\n        }\n        winningMarketIndex = highestIndex;\n        isSet = true;\n        emit OutcomeAssignment(winningMarketIndex);\n    }\n\n    /// @dev Returns if winning outcome is set\n    /// @return Is outcome set?\n    function isOutcomeSet()\n        public\n        view\n        returns (bool)\n    {\n        return isSet;\n    }\n\n    /// @dev Returns winning outcome\n    /// @return Outcome\n    function getOutcome()\n        public\n        view\n        returns (int)\n    {\n        return int(winningMarketIndex);\n    }\n}\n",
  "sourcePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/FutarchyOracle.sol",
  "ast": {
    "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/FutarchyOracle.sol",
    "exportedSymbols": {
      "FutarchyOracle": [
        4380
      ],
      "FutarchyOracleData": [
        4023
      ],
      "FutarchyOracleProxy": [
        4127
      ]
    },
    "id": 4381,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3981,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:18"
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol",
        "file": "../Oracles/Oracle.sol",
        "id": 3982,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 4842,
        "src": "24:31:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol",
        "file": "../Events/EventFactory.sol",
        "id": 3983,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 603,
        "src": "56:36:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/StandardMarketWithPriceLoggerFactory.sol",
        "file": "../Markets/StandardMarketWithPriceLoggerFactory.sol",
        "id": 3984,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 3623,
        "src": "93:61:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
        "file": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
        "id": 3985,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 6829,
        "src": "155:55:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4023,
        "linearizedBaseContracts": [
          4023
        ],
        "name": "FutarchyOracleData",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 3989,
            "name": "FutarchyFunding",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3987,
                  "indexed": false,
                  "name": "funding",
                  "nodeType": "VariableDeclaration",
                  "scope": 3989,
                  "src": "300:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3986,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "299:14:18"
            },
            "src": "278:36:18"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3991,
            "name": "FutarchyClosing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "340:2:18"
            },
            "src": "319:24:18"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3995,
            "name": "OutcomeAssignment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3993,
                  "indexed": false,
                  "name": "winningMarketIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "372:23:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3992,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:25:18"
            },
            "src": "348:49:18"
          },
          {
            "constant": true,
            "id": 3998,
            "name": "LONG",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "436:30:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3996,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "436:5:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 3997,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "465:1:18",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4000,
            "name": "creator",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "504:15:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3999,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "504:7:18",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4003,
            "name": "markets",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "525:46:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
              "typeString": "contract StandardMarketWithPriceLogger[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 4001,
                "name": "StandardMarketWithPriceLogger",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3549,
                "src": "525:29:18",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                  "typeString": "contract StandardMarketWithPriceLogger"
                }
              },
              "id": 4002,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "525:31:18",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage_ptr",
                "typeString": "contract StandardMarketWithPriceLogger[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4005,
            "name": "categoricalEvent",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "577:40:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CategoricalEvent_$158",
              "typeString": "contract CategoricalEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 4004,
              "name": "CategoricalEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 158,
              "src": "577:16:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                "typeString": "contract CategoricalEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4007,
            "name": "tradingPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "623:25:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4006,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "623:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4009,
            "name": "winningMarketIndex",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "654:30:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4008,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "654:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4011,
            "name": "isSet",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "690:17:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 4010,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "690:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4021,
              "nodeType": "Block",
              "src": "768:104:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4014,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7920,
                            "src": "832:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "832:10:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4016,
                          "name": "creator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4000,
                          "src": "846:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "832:21:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "824:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "824:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4019,
                  "nodeType": "ExpressionStatement",
                  "src": "824:30:18"
                },
                {
                  "id": 4020,
                  "nodeType": "PlaceholderStatement",
                  "src": "864:1:18"
                }
              ]
            },
            "documentation": null,
            "id": 4022,
            "name": "isCreator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4012,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "765:2:18"
            },
            "src": "747:125:18",
            "visibility": "internal"
          }
        ],
        "scope": 4381,
        "src": "213:661:18"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4024,
              "name": "Proxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6828,
              "src": "908:5:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxy_$6828",
                "typeString": "contract Proxy"
              }
            },
            "id": 4025,
            "nodeType": "InheritanceSpecifier",
            "src": "908:5:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4026,
              "name": "FutarchyOracleData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4023,
              "src": "915:18:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FutarchyOracleData_$4023",
                "typeString": "contract FutarchyOracleData"
              }
            },
            "id": 4027,
            "nodeType": "InheritanceSpecifier",
            "src": "915:18:18"
          }
        ],
        "contractDependencies": [
          4023,
          6798,
          6828
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4127,
        "linearizedBaseContracts": [
          4127,
          4023,
          6828,
          6798
        ],
        "name": "FutarchyOracleProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4125,
              "nodeType": "Block",
              "src": "2127:737:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4060,
                          "name": "_tradingPeriod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4051,
                          "src": "2192:14:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2209:1:18",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2192:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4059,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "2184:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2184:27:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4064,
                  "nodeType": "ExpressionStatement",
                  "src": "2184:27:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4065,
                      "name": "categoricalEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4005,
                      "src": "2254:16:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4068,
                          "name": "collateralToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4035,
                          "src": "2309:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$7778",
                            "typeString": "contract ERC20"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4071,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8022,
                                  "src": "2341:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FutarchyOracleProxy_$4127",
                                    "typeString": "contract FutarchyOracleProxy"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FutarchyOracleProxy_$4127",
                                    "typeString": "contract FutarchyOracleProxy"
                                  }
                                ],
                                "id": 4070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2333:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2333:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4069,
                            "name": "Oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4841,
                            "src": "2326:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Oracle_$4841_$",
                              "typeString": "type(contract Oracle)"
                            }
                          },
                          "id": 4073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2326:21:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Oracle_$4841",
                            "typeString": "contract Oracle"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4074,
                          "name": "outcomeCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4039,
                          "src": "2349:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$7778",
                            "typeString": "contract ERC20"
                          },
                          {
                            "typeIdentifier": "t_contract$_Oracle_$4841",
                            "typeString": "contract Oracle"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4066,
                          "name": "eventFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4033,
                          "src": "2273:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EventFactory_$602",
                            "typeString": "contract EventFactory"
                          }
                        },
                        "id": 4067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "createCategoricalEvent",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 527,
                        "src": "2273:35:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "function (contract ERC20,contract Oracle,uint8) external returns (contract CategoricalEvent)"
                        }
                      },
                      "id": 4075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2273:89:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2254:108:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 4077,
                  "nodeType": "ExpressionStatement",
                  "src": "2254:108:18"
                },
                {
                  "body": {
                    "id": 4115,
                    "nodeType": "Block",
                    "src": "2468:322:18",
                    "statements": [
                      {
                        "assignments": [
                          4091
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4091,
                            "name": "scalarEvent",
                            "nodeType": "VariableDeclaration",
                            "scope": 4115,
                            "src": "2482:23:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ScalarEvent_$870",
                              "typeString": "contract ScalarEvent"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4090,
                              "name": "ScalarEvent",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 870,
                              "src": "2482:11:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4102,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4096,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4079,
                                  "src": "2587:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4094,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "2556:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "outcomeTokens",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 203,
                                "src": "2556:30:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_OutcomeToken_$5793_$",
                                  "typeString": "function (uint256) view external returns (contract OutcomeToken)"
                                }
                              },
                              "id": 4097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2556:33:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                "typeString": "contract OutcomeToken"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4098,
                              "name": "oracle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4037,
                              "src": "2607:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Oracle_$4841",
                                "typeString": "contract Oracle"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4099,
                              "name": "lowerBound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4041,
                              "src": "2631:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4100,
                              "name": "upperBound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4043,
                              "src": "2659:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                "typeString": "contract OutcomeToken"
                              },
                              {
                                "typeIdentifier": "t_contract$_Oracle_$4841",
                                "typeString": "contract Oracle"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4092,
                              "name": "eventFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4033,
                              "src": "2508:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EventFactory_$602",
                                "typeString": "contract EventFactory"
                              }
                            },
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "createScalarEvent",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 601,
                            "src": "2508:30:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$_t_contract$_ScalarEvent_$870_$",
                              "typeString": "function (contract ERC20,contract Oracle,int256,int256) external returns (contract ScalarEvent)"
                            }
                          },
                          "id": 4101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2508:175:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ScalarEvent_$870",
                            "typeString": "contract ScalarEvent"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2482:201:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4108,
                                  "name": "scalarEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4091,
                                  "src": "2737:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                    "typeString": "contract ScalarEvent"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4109,
                                  "name": "marketMaker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4047,
                                  "src": "2750:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                                    "typeString": "contract MarketMaker"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4110,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4049,
                                  "src": "2763:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4111,
                                  "name": "startDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4053,
                                  "src": "2768:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                    "typeString": "contract ScalarEvent"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                                    "typeString": "contract MarketMaker"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4106,
                                  "name": "marketFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4045,
                                  "src": "2710:13:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                                    "typeString": "contract StandardMarketWithPriceLoggerFactory"
                                  }
                                },
                                "id": 4107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "createMarket",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3621,
                                "src": "2710:26:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_contract$_Event_$392_$_t_contract$_MarketMaker_$1606_$_t_uint24_$_t_uint256_$returns$_t_contract$_StandardMarketWithPriceLogger_$3549_$",
                                  "typeString": "function (contract Event,contract MarketMaker,uint24,uint256) external returns (contract StandardMarketWithPriceLogger)"
                                }
                              },
                              "id": 4112,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2710:68:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4103,
                              "name": "markets",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4003,
                              "src": "2697:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                              }
                            },
                            "id": 4105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2697:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_StandardMarketWithPriceLogger_$3549_$returns$_t_uint256_$",
                              "typeString": "function (contract StandardMarketWithPriceLogger) returns (uint256)"
                            }
                          },
                          "id": 4113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2697:82:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4114,
                        "nodeType": "ExpressionStatement",
                        "src": "2697:82:18"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4082,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4079,
                      "src": "2423:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4083,
                          "name": "categoricalEvent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4005,
                          "src": "2427:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                            "typeString": "contract CategoricalEvent"
                          }
                        },
                        "id": 4084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getOutcomeCount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 331,
                        "src": "2427:32:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                          "typeString": "function () view external returns (uint8)"
                        }
                      },
                      "id": 4085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2427:34:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "2423:38:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4116,
                  "initializationExpression": {
                    "assignments": [
                      4079
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4079,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4116,
                        "src": "2410:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4078,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "2410:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4081,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2420:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2410:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2463:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4087,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "2463:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4089,
                    "nodeType": "ExpressionStatement",
                    "src": "2463:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "2405:385:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4117,
                      "name": "creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4000,
                      "src": "2799:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4118,
                      "name": "_creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4031,
                      "src": "2809:8:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2799:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4120,
                  "nodeType": "ExpressionStatement",
                  "src": "2799:18:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4121,
                      "name": "tradingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4007,
                      "src": "2827:13:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4122,
                      "name": "_tradingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4051,
                      "src": "2843:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2827:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4124,
                  "nodeType": "ExpressionStatement",
                  "src": "2827:30:18"
                }
              ]
            },
            "documentation": "@dev Constructor creates events and markets for futarchy oracle\n @param _creator Oracle creator\n @param eventFactory Event factory contract\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param outcomeCount Number of event outcomes\n @param lowerBound Lower bound for event outcome\n @param upperBound Lower bound for event outcome\n @param marketFactory Market factory contract\n @param marketMaker Market maker contract\n @param fee Market fee\n @param _tradingPeriod Trading period before decision can be determined\n @param startDate Start date for price logging",
            "id": 4126,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4056,
                    "name": "proxied",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4029,
                    "src": "2099:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4055,
                  "name": "Proxy",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6828,
                  "src": "2093:5:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Proxy_$6828_$",
                    "typeString": "type(contract Proxy)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2093:14:18"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4029,
                  "name": "proxied",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1706:15:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1706:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4031,
                  "name": "_creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1731:16:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1731:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4033,
                  "name": "eventFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1757:25:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EventFactory_$602",
                    "typeString": "contract EventFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4032,
                    "name": "EventFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 602,
                    "src": "1757:12:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventFactory_$602",
                      "typeString": "contract EventFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4035,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1792:21:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4034,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "1792:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4037,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1823:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4036,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "1823:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4039,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1846:18:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4038,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1846:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4041,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1874:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4040,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4043,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1898:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4042,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "1898:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4045,
                  "name": "marketFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1922:50:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                    "typeString": "contract StandardMarketWithPriceLoggerFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4044,
                    "name": "StandardMarketWithPriceLoggerFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3622,
                    "src": "1922:36:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                      "typeString": "contract StandardMarketWithPriceLoggerFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4047,
                  "name": "marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1982:23:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                    "typeString": "contract MarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4046,
                    "name": "MarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1606,
                    "src": "1982:11:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MarketMaker_$1606",
                      "typeString": "contract MarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4049,
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2015:10:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 4048,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2015:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4051,
                  "name": "_tradingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2035:19:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4050,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4053,
                  "name": "startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2064:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4052,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2064:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1696:388:18"
            },
            "returnParameters": {
              "id": 4058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2127:0:18"
            },
            "scope": 4127,
            "src": "1685:1179:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4381,
        "src": "876:1990:18"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4128,
              "name": "Proxied",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6798,
              "src": "3033:7:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxied_$6798",
                "typeString": "contract Proxied"
              }
            },
            "id": 4129,
            "nodeType": "InheritanceSpecifier",
            "src": "3033:7:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4130,
              "name": "Oracle",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4841,
              "src": "3042:6:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Oracle_$4841",
                "typeString": "contract Oracle"
              }
            },
            "id": 4131,
            "nodeType": "InheritanceSpecifier",
            "src": "3042:6:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4132,
              "name": "FutarchyOracleData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4023,
              "src": "3050:18:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FutarchyOracleData_$4023",
                "typeString": "contract FutarchyOracleData"
              }
            },
            "id": 4133,
            "nodeType": "InheritanceSpecifier",
            "src": "3050:18:18"
          }
        ],
        "contractDependencies": [
          4023,
          4841,
          6798
        ],
        "contractKind": "contract",
        "documentation": "@title Futarchy oracle contract - Allows to create an oracle based on market behaviour\n @author Stefan George - <stefan@gnosis.pm>",
        "fullyImplemented": true,
        "id": 4380,
        "linearizedBaseContracts": [
          4380,
          4023,
          4841,
          6798
        ],
        "name": "FutarchyOracle",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4135,
            "libraryName": {
              "contractScope": null,
              "id": 4134,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7381,
              "src": "3081:8:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$7381",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "3075:21:18",
            "typeName": null
          },
          {
            "body": {
              "id": 4214,
              "nodeType": "Block",
              "src": "3308:671:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4147,
                              "name": "creator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4000,
                              "src": "3405:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4149,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "3422:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                    "typeString": "contract FutarchyOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                    "typeString": "contract FutarchyOracle"
                                  }
                                ],
                                "id": 4148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3414:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3414:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4151,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3429:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4143,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3357:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "collateralToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 194,
                                "src": "3357:32:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                  "typeString": "function () view external returns (contract ERC20)"
                                }
                              },
                              "id": 4145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3357:34:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$7778",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 4146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7511,
                            "src": "3357:47:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3357:80:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4158,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3508:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                ],
                                "id": 4157,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3500:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3500:25:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4160,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3527:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4153,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3457:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "collateralToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 194,
                                "src": "3457:32:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                  "typeString": "function () view external returns (contract ERC20)"
                                }
                              },
                              "id": 4155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3457:34:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$7778",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 4156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "approve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7476,
                            "src": "3457:42:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3457:78:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3357:178:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "3346:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3346:190:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4164,
                  "nodeType": "ExpressionStatement",
                  "src": "3346:190:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4168,
                        "name": "funding",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4137,
                        "src": "3578:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4165,
                        "name": "categoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4005,
                        "src": "3546:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      "id": 4167,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buyAllOutcomes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 251,
                      "src": "3546:31:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 4169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3546:40:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4170,
                  "nodeType": "ExpressionStatement",
                  "src": "3546:40:18"
                },
                {
                  "body": {
                    "id": 4208,
                    "nodeType": "Block",
                    "src": "3710:224:18",
                    "statements": [
                      {
                        "assignments": [
                          4183
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4183,
                            "name": "market",
                            "nodeType": "VariableDeclaration",
                            "scope": 4208,
                            "src": "3724:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Market_$2296",
                              "typeString": "contract Market"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4182,
                              "name": "Market",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2296,
                              "src": "3724:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Market_$2296",
                                "typeString": "contract Market"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4187,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4184,
                            "name": "markets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4003,
                            "src": "3740:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                              "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                            }
                          },
                          "id": 4186,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4185,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4172,
                            "src": "3748:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3740:10:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                            "typeString": "contract StandardMarketWithPriceLogger"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3724:26:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4196,
                                      "name": "market",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4183,
                                      "src": "3871:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Market_$2296",
                                        "typeString": "contract Market"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Market_$2296",
                                        "typeString": "contract Market"
                                      }
                                    ],
                                    "id": 4195,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3863:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 4197,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3863:15:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4198,
                                  "name": "funding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4137,
                                  "src": "3880:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4189,
                                          "name": "market",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4183,
                                          "src": "3814:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Market_$2296",
                                            "typeString": "contract Market"
                                          }
                                        },
                                        "id": 4190,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "eventContract",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2214,
                                        "src": "3814:20:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                                          "typeString": "function () view external returns (contract Event)"
                                        }
                                      },
                                      "id": 4191,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3814:22:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Event_$392",
                                        "typeString": "contract Event"
                                      }
                                    },
                                    "id": 4192,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collateralToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 194,
                                    "src": "3814:38:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                      "typeString": "function () view external returns (contract ERC20)"
                                    }
                                  },
                                  "id": 4193,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3814:40:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 4194,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "approve",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7476,
                                "src": "3814:48:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 4199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3814:74:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4188,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              7923,
                              7924
                            ],
                            "referencedDeclaration": 7923,
                            "src": "3806:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 4200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3806:83:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4201,
                        "nodeType": "ExpressionStatement",
                        "src": "3806:83:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4205,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3915:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4202,
                              "name": "market",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4183,
                              "src": "3903:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Market_$2296",
                                "typeString": "contract Market"
                              }
                            },
                            "id": 4204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fund",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2237,
                            "src": "3903:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) external"
                            }
                          },
                          "id": 4206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:20:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4207,
                        "nodeType": "ExpressionStatement",
                        "src": "3903:20:18"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4175,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4172,
                      "src": "3685:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4176,
                        "name": "markets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4003,
                        "src": "3689:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                          "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                        }
                      },
                      "id": 4177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3689:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3685:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4209,
                  "initializationExpression": {
                    "assignments": [
                      4172
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4172,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4209,
                        "src": "3672:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4171,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3672:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4174,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3682:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3672:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3705:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4179,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4172,
                        "src": "3705:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4181,
                    "nodeType": "ExpressionStatement",
                    "src": "3705:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "3667:267:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4211,
                        "name": "funding",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4137,
                        "src": "3964:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4210,
                      "name": "FutarchyFunding",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3989,
                      "src": "3948:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3948:24:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4213,
                  "nodeType": "EmitStatement",
                  "src": "3943:29:18"
                }
              ]
            },
            "documentation": "@dev Funds all markets with equal amount of funding\n @param funding Amount of funding",
            "id": 4215,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4140,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4139,
                  "name": "isCreator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4022,
                  "src": "3294:9:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3294:9:18"
              }
            ],
            "name": "fund",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4137,
                  "name": "funding",
                  "nodeType": "VariableDeclaration",
                  "scope": 4215,
                  "src": "3257:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4136,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3257:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3256:14:18"
            },
            "returnParameters": {
              "id": 4141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3308:0:18"
            },
            "scope": 4380,
            "src": "3243:736:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4283,
              "nodeType": "Block",
              "src": "4150:701:18",
              "statements": [
                {
                  "assignments": [
                    4221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4221,
                      "name": "market",
                      "nodeType": "VariableDeclaration",
                      "scope": 4283,
                      "src": "4201:13:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Market_$2296",
                        "typeString": "contract Market"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4220,
                        "name": "Market",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2296,
                        "src": "4201:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4228,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4222,
                      "name": "markets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4003,
                      "src": "4217:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                        "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                      }
                    },
                    "id": 4227,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4224,
                            "name": "getOutcome",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4379
                            ],
                            "referencedDeclaration": 4379,
                            "src": "4230:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$",
                              "typeString": "function () view returns (int256)"
                            }
                          },
                          "id": 4225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4230:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 4223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4225:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 4226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4225:18:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4217:27:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                      "typeString": "contract StandardMarketWithPriceLogger"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4201:43:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4230,
                              "name": "categoricalEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4005,
                              "src": "4262:16:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            },
                            "id": 4231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isOutcomeSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 198,
                            "src": "4262:29:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 4232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4262:31:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4233,
                                  "name": "market",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4221,
                                  "src": "4297:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Market_$2296",
                                    "typeString": "contract Market"
                                  }
                                },
                                "id": 4234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "eventContract",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2214,
                                "src": "4297:20:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                                  "typeString": "function () view external returns (contract Event)"
                                }
                              },
                              "id": 4235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4297:22:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Event_$392",
                                "typeString": "contract Event"
                              }
                            },
                            "id": 4236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isOutcomeSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 198,
                            "src": "4297:35:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 4237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4297:37:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4262:72:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "4254:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4254:81:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4240,
                  "nodeType": "ExpressionStatement",
                  "src": "4254:81:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4241,
                        "name": "market",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4221,
                        "src": "4439:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "id": 4243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "close",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2240,
                      "src": "4439:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 4244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4439:14:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4245,
                  "nodeType": "ExpressionStatement",
                  "src": "4439:14:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4246,
                            "name": "market",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4221,
                            "src": "4463:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Market_$2296",
                              "typeString": "contract Market"
                            }
                          },
                          "id": 4248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "eventContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2214,
                          "src": "4463:20:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                            "typeString": "function () view external returns (contract Event)"
                          }
                        },
                        "id": 4249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4463:22:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Event_$392",
                          "typeString": "contract Event"
                        }
                      },
                      "id": 4250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemWinnings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 391,
                      "src": "4463:37:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4463:39:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4252,
                  "nodeType": "ExpressionStatement",
                  "src": "4463:39:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4253,
                        "name": "market",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4221,
                        "src": "4512:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "id": 4255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2245,
                      "src": "4512:19:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4512:21:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4257,
                  "nodeType": "ExpressionStatement",
                  "src": "4512:21:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4258,
                        "name": "categoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4005,
                        "src": "4647:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      "id": 4260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemWinnings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 141,
                      "src": "4647:31:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4647:33:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4262,
                  "nodeType": "ExpressionStatement",
                  "src": "4647:33:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4268,
                            "name": "creator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4000,
                            "src": "4742:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4274,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8024,
                                    "src": "4804:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                      "typeString": "contract FutarchyOracle"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                      "typeString": "contract FutarchyOracle"
                                    }
                                  ],
                                  "id": 4273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4796:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 4275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4796:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4269,
                                    "name": "categoricalEvent",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4005,
                                    "src": "4751:16:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                      "typeString": "contract CategoricalEvent"
                                    }
                                  },
                                  "id": 4270,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collateralToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 194,
                                  "src": "4751:32:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                    "typeString": "function () view external returns (contract ERC20)"
                                  }
                                },
                                "id": 4271,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4751:34:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$7778",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 4272,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7422,
                              "src": "4751:44:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 4276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4751:59:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4264,
                                "name": "categoricalEvent",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4005,
                                "src": "4698:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                  "typeString": "contract CategoricalEvent"
                                }
                              },
                              "id": 4265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collateralToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 194,
                              "src": "4698:32:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                "typeString": "function () view external returns (contract ERC20)"
                              }
                            },
                            "id": 4266,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4698:34:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 4267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7441,
                          "src": "4698:43:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4698:113:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "4690:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4690:122:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4279,
                  "nodeType": "ExpressionStatement",
                  "src": "4690:122:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4280,
                      "name": "FutarchyClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3991,
                      "src": "4827:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4827:17:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4282,
                  "nodeType": "EmitStatement",
                  "src": "4822:22:18"
                }
              ]
            },
            "documentation": "@dev Closes market for winning outcome and redeems winnings and sends all collateral tokens to creator",
            "id": 4284,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4217,
                  "name": "isCreator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4022,
                  "src": "4136:9:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4136:9:18"
              }
            ],
            "name": "close",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4216,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4110:2:18"
            },
            "returnParameters": {
              "id": 4219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4150:0:18"
            },
            "scope": 4380,
            "src": "4096:755:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4360,
              "nodeType": "Block",
              "src": "4991:676:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5070:6:18",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4288,
                            "name": "isSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4011,
                            "src": "5071:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4290,
                                    "name": "markets",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4003,
                                    "src": "5080:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                      "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                                    }
                                  },
                                  "id": 4292,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4291,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5088:1:18",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5080:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                    "typeString": "contract StandardMarketWithPriceLogger"
                                  }
                                },
                                "id": 4293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "startDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3277,
                                "src": "5080:20:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view external returns (uint256)"
                                }
                              },
                              "id": 4294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5080:22:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4295,
                              "name": "tradingPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4007,
                              "src": "5105:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5080:38:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4297,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7922,
                            "src": "5121:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5080:44:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5070:54:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4287,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "5062:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5062:63:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4301,
                  "nodeType": "ExpressionStatement",
                  "src": "5062:63:18"
                },
                {
                  "assignments": [
                    4303
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4303,
                      "name": "highestAvgPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 4360,
                      "src": "5210:20:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4302,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5210:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4309,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4304,
                          "name": "markets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4003,
                          "src": "5233:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                            "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                          }
                        },
                        "id": 4306,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5241:1:18",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5233:10:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                          "typeString": "contract StandardMarketWithPriceLogger"
                        }
                      },
                      "id": 4307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAvgPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3514,
                      "src": "5233:22:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 4308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5233:24:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5210:47:18"
                },
                {
                  "assignments": [
                    4311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4311,
                      "name": "highestIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 4360,
                      "src": "5267:17:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4310,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5267:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4313,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5287:1:18",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5267:21:18"
                },
                {
                  "body": {
                    "id": 4346,
                    "nodeType": "Block",
                    "src": "5341:203:18",
                    "statements": [
                      {
                        "assignments": [
                          4326
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4326,
                            "name": "avgPrice",
                            "nodeType": "VariableDeclaration",
                            "scope": 4346,
                            "src": "5355:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4325,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5355:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4332,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4327,
                                "name": "markets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4003,
                                "src": "5371:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                  "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                                }
                              },
                              "id": 4329,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4328,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4315,
                                "src": "5379:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5371:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            },
                            "id": 4330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAvgPrice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3514,
                            "src": "5371:22:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 4331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5371:24:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5355:40:18"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4333,
                            "name": "avgPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4326,
                            "src": "5413:8:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4334,
                            "name": "highestAvgPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4303,
                            "src": "5424:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5413:26:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4345,
                        "nodeType": "IfStatement",
                        "src": "5409:125:18",
                        "trueBody": {
                          "id": 4344,
                          "nodeType": "Block",
                          "src": "5441:93:18",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4336,
                                  "name": "highestAvgPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4303,
                                  "src": "5459:15:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4337,
                                  "name": "avgPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4326,
                                  "src": "5477:8:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5459:26:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4339,
                              "nodeType": "ExpressionStatement",
                              "src": "5459:26:18"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4342,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4340,
                                  "name": "highestIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4311,
                                  "src": "5503:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4341,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4315,
                                  "src": "5518:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "5503:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4343,
                              "nodeType": "ExpressionStatement",
                              "src": "5503:16:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4318,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4315,
                      "src": "5316:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4319,
                        "name": "markets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4003,
                        "src": "5320:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                          "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                        }
                      },
                      "id": 4320,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5320:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5316:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4347,
                  "initializationExpression": {
                    "assignments": [
                      4315
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4315,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4347,
                        "src": "5303:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4314,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5303:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4317,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5313:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5303:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4323,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5336:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4322,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4315,
                        "src": "5336:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4324,
                    "nodeType": "ExpressionStatement",
                    "src": "5336:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "5298:246:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4348,
                      "name": "winningMarketIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4009,
                      "src": "5553:18:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4349,
                      "name": "highestIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4311,
                      "src": "5574:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5553:33:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4351,
                  "nodeType": "ExpressionStatement",
                  "src": "5553:33:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4352,
                      "name": "isSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4011,
                      "src": "5596:5:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 4353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5604:4:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5596:12:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4355,
                  "nodeType": "ExpressionStatement",
                  "src": "5596:12:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4357,
                        "name": "winningMarketIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4009,
                        "src": "5641:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4356,
                      "name": "OutcomeAssignment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3995,
                      "src": "5623:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5623:37:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4359,
                  "nodeType": "EmitStatement",
                  "src": "5618:42:18"
                }
              ]
            },
            "documentation": "@dev Allows to set the oracle outcome based on the market with largest long position",
            "id": 4361,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setOutcome",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4969:2:18"
            },
            "returnParameters": {
              "id": 4286,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4991:0:18"
            },
            "scope": 4380,
            "src": "4950:717:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4368,
              "nodeType": "Block",
              "src": "5831:29:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4366,
                    "name": "isSet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4011,
                    "src": "5848:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4365,
                  "id": 4367,
                  "nodeType": "Return",
                  "src": "5841:12:18"
                }
              ]
            },
            "documentation": "@dev Returns if winning outcome is set\n @return Is outcome set?",
            "id": 4369,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOutcomeSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4362,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5773:2:18"
            },
            "returnParameters": {
              "id": 4365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4364,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4369,
                  "src": "5821:4:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4363,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5821:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5820:6:18"
            },
            "scope": 4380,
            "src": "5752:108:18",
            "stateMutability": "view",
            "superFunction": 4835,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4378,
              "nodeType": "Block",
              "src": "6003:47:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4375,
                        "name": "winningMarketIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4009,
                        "src": "6024:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6020:3:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int256_$",
                        "typeString": "type(int256)"
                      },
                      "typeName": "int"
                    },
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6020:23:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 4373,
                  "id": 4377,
                  "nodeType": "Return",
                  "src": "6013:30:18"
                }
              ]
            },
            "documentation": "@dev Returns winning outcome\n @return Outcome",
            "id": 4379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOutcome",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4370,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5946:2:18"
            },
            "returnParameters": {
              "id": 4373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4372,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4379,
                  "src": "5994:3:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4371,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "5994:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5993:5:18"
            },
            "scope": 4380,
            "src": "5927:123:18",
            "stateMutability": "view",
            "superFunction": 4840,
            "visibility": "public"
          }
        ],
        "scope": 4381,
        "src": "3006:3046:18"
      }
    ],
    "src": "0:6053:18"
  },
  "legacyAST": {
    "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/FutarchyOracle.sol",
    "exportedSymbols": {
      "FutarchyOracle": [
        4380
      ],
      "FutarchyOracleData": [
        4023
      ],
      "FutarchyOracleProxy": [
        4127
      ]
    },
    "id": 4381,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3981,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:18"
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Oracles/Oracle.sol",
        "file": "../Oracles/Oracle.sol",
        "id": 3982,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 4842,
        "src": "24:31:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Events/EventFactory.sol",
        "file": "../Events/EventFactory.sol",
        "id": 3983,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 603,
        "src": "56:36:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/alan/src/github.com/gnosis/pm-contracts/contracts/Markets/StandardMarketWithPriceLoggerFactory.sol",
        "file": "../Markets/StandardMarketWithPriceLoggerFactory.sol",
        "id": 3984,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 3623,
        "src": "93:61:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
        "file": "@gnosis.pm/util-contracts/contracts/Proxy.sol",
        "id": 3985,
        "nodeType": "ImportDirective",
        "scope": 4381,
        "sourceUnit": 6829,
        "src": "155:55:18",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4023,
        "linearizedBaseContracts": [
          4023
        ],
        "name": "FutarchyOracleData",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 3989,
            "name": "FutarchyFunding",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3988,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3987,
                  "indexed": false,
                  "name": "funding",
                  "nodeType": "VariableDeclaration",
                  "scope": 3989,
                  "src": "300:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3986,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "300:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "299:14:18"
            },
            "src": "278:36:18"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3991,
            "name": "FutarchyClosing",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3990,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "340:2:18"
            },
            "src": "319:24:18"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3995,
            "name": "OutcomeAssignment",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3994,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3993,
                  "indexed": false,
                  "name": "winningMarketIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "372:23:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3992,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "371:25:18"
            },
            "src": "348:49:18"
          },
          {
            "constant": true,
            "id": 3998,
            "name": "LONG",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "436:30:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 3996,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "436:5:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "31",
              "id": 3997,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "465:1:18",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1_by_1",
                "typeString": "int_const 1"
              },
              "value": "1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4000,
            "name": "creator",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "504:15:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3999,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "504:7:18",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 4003,
            "name": "markets",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "525:46:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
              "typeString": "contract StandardMarketWithPriceLogger[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 4001,
                "name": "StandardMarketWithPriceLogger",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 3549,
                "src": "525:29:18",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                  "typeString": "contract StandardMarketWithPriceLogger"
                }
              },
              "id": 4002,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "525:31:18",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage_ptr",
                "typeString": "contract StandardMarketWithPriceLogger[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4005,
            "name": "categoricalEvent",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "577:40:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_CategoricalEvent_$158",
              "typeString": "contract CategoricalEvent"
            },
            "typeName": {
              "contractScope": null,
              "id": 4004,
              "name": "CategoricalEvent",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 158,
              "src": "577:16:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                "typeString": "contract CategoricalEvent"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4007,
            "name": "tradingPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "623:25:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4006,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "623:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4009,
            "name": "winningMarketIndex",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "654:30:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4008,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "654:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 4011,
            "name": "isSet",
            "nodeType": "VariableDeclaration",
            "scope": 4023,
            "src": "690:17:18",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 4010,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "690:4:18",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4021,
              "nodeType": "Block",
              "src": "768:104:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 4017,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 4014,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7920,
                            "src": "832:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4015,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "832:10:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 4016,
                          "name": "creator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4000,
                          "src": "846:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "832:21:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "824:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "824:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4019,
                  "nodeType": "ExpressionStatement",
                  "src": "824:30:18"
                },
                {
                  "id": 4020,
                  "nodeType": "PlaceholderStatement",
                  "src": "864:1:18"
                }
              ]
            },
            "documentation": null,
            "id": 4022,
            "name": "isCreator",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 4012,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "765:2:18"
            },
            "src": "747:125:18",
            "visibility": "internal"
          }
        ],
        "scope": 4381,
        "src": "213:661:18"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4024,
              "name": "Proxy",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6828,
              "src": "908:5:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxy_$6828",
                "typeString": "contract Proxy"
              }
            },
            "id": 4025,
            "nodeType": "InheritanceSpecifier",
            "src": "908:5:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4026,
              "name": "FutarchyOracleData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4023,
              "src": "915:18:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FutarchyOracleData_$4023",
                "typeString": "contract FutarchyOracleData"
              }
            },
            "id": 4027,
            "nodeType": "InheritanceSpecifier",
            "src": "915:18:18"
          }
        ],
        "contractDependencies": [
          4023,
          6798,
          6828
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4127,
        "linearizedBaseContracts": [
          4127,
          4023,
          6828,
          6798
        ],
        "name": "FutarchyOracleProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4125,
              "nodeType": "Block",
              "src": "2127:737:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4060,
                          "name": "_tradingPeriod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4051,
                          "src": "2192:14:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4061,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2209:1:18",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2192:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4059,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "2184:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2184:27:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4064,
                  "nodeType": "ExpressionStatement",
                  "src": "2184:27:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4076,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4065,
                      "name": "categoricalEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4005,
                      "src": "2254:16:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4068,
                          "name": "collateralToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4035,
                          "src": "2309:15:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$7778",
                            "typeString": "contract ERC20"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4071,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8022,
                                  "src": "2341:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FutarchyOracleProxy_$4127",
                                    "typeString": "contract FutarchyOracleProxy"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FutarchyOracleProxy_$4127",
                                    "typeString": "contract FutarchyOracleProxy"
                                  }
                                ],
                                "id": 4070,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2333:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2333:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4069,
                            "name": "Oracle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4841,
                            "src": "2326:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Oracle_$4841_$",
                              "typeString": "type(contract Oracle)"
                            }
                          },
                          "id": 4073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2326:21:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Oracle_$4841",
                            "typeString": "contract Oracle"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4074,
                          "name": "outcomeCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4039,
                          "src": "2349:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$7778",
                            "typeString": "contract ERC20"
                          },
                          {
                            "typeIdentifier": "t_contract$_Oracle_$4841",
                            "typeString": "contract Oracle"
                          },
                          {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4066,
                          "name": "eventFactory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4033,
                          "src": "2273:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_EventFactory_$602",
                            "typeString": "contract EventFactory"
                          }
                        },
                        "id": 4067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "createCategoricalEvent",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 527,
                        "src": "2273:35:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_uint8_$returns$_t_contract$_CategoricalEvent_$158_$",
                          "typeString": "function (contract ERC20,contract Oracle,uint8) external returns (contract CategoricalEvent)"
                        }
                      },
                      "id": 4075,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2273:89:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                        "typeString": "contract CategoricalEvent"
                      }
                    },
                    "src": "2254:108:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                      "typeString": "contract CategoricalEvent"
                    }
                  },
                  "id": 4077,
                  "nodeType": "ExpressionStatement",
                  "src": "2254:108:18"
                },
                {
                  "body": {
                    "id": 4115,
                    "nodeType": "Block",
                    "src": "2468:322:18",
                    "statements": [
                      {
                        "assignments": [
                          4091
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4091,
                            "name": "scalarEvent",
                            "nodeType": "VariableDeclaration",
                            "scope": 4115,
                            "src": "2482:23:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ScalarEvent_$870",
                              "typeString": "contract ScalarEvent"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4090,
                              "name": "ScalarEvent",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 870,
                              "src": "2482:11:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                "typeString": "contract ScalarEvent"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4102,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4096,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4079,
                                  "src": "2587:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4094,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "2556:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4095,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "outcomeTokens",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 203,
                                "src": "2556:30:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_OutcomeToken_$5793_$",
                                  "typeString": "function (uint256) view external returns (contract OutcomeToken)"
                                }
                              },
                              "id": 4097,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2556:33:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                "typeString": "contract OutcomeToken"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4098,
                              "name": "oracle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4037,
                              "src": "2607:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Oracle_$4841",
                                "typeString": "contract Oracle"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4099,
                              "name": "lowerBound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4041,
                              "src": "2631:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4100,
                              "name": "upperBound",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4043,
                              "src": "2659:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_OutcomeToken_$5793",
                                "typeString": "contract OutcomeToken"
                              },
                              {
                                "typeIdentifier": "t_contract$_Oracle_$4841",
                                "typeString": "contract Oracle"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4092,
                              "name": "eventFactory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4033,
                              "src": "2508:12:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_EventFactory_$602",
                                "typeString": "contract EventFactory"
                              }
                            },
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "createScalarEvent",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 601,
                            "src": "2508:30:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_contract$_ERC20_$7778_$_t_contract$_Oracle_$4841_$_t_int256_$_t_int256_$returns$_t_contract$_ScalarEvent_$870_$",
                              "typeString": "function (contract ERC20,contract Oracle,int256,int256) external returns (contract ScalarEvent)"
                            }
                          },
                          "id": 4101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2508:175:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ScalarEvent_$870",
                            "typeString": "contract ScalarEvent"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2482:201:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4108,
                                  "name": "scalarEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4091,
                                  "src": "2737:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                    "typeString": "contract ScalarEvent"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4109,
                                  "name": "marketMaker",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4047,
                                  "src": "2750:11:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                                    "typeString": "contract MarketMaker"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4110,
                                  "name": "fee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4049,
                                  "src": "2763:3:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4111,
                                  "name": "startDate",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4053,
                                  "src": "2768:9:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ScalarEvent_$870",
                                    "typeString": "contract ScalarEvent"
                                  },
                                  {
                                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                                    "typeString": "contract MarketMaker"
                                  },
                                  {
                                    "typeIdentifier": "t_uint24",
                                    "typeString": "uint24"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4106,
                                  "name": "marketFactory",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4045,
                                  "src": "2710:13:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                                    "typeString": "contract StandardMarketWithPriceLoggerFactory"
                                  }
                                },
                                "id": 4107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "createMarket",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3621,
                                "src": "2710:26:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_contract$_Event_$392_$_t_contract$_MarketMaker_$1606_$_t_uint24_$_t_uint256_$returns$_t_contract$_StandardMarketWithPriceLogger_$3549_$",
                                  "typeString": "function (contract Event,contract MarketMaker,uint24,uint256) external returns (contract StandardMarketWithPriceLogger)"
                                }
                              },
                              "id": 4112,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2710:68:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4103,
                              "name": "markets",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4003,
                              "src": "2697:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                              }
                            },
                            "id": 4105,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2697:12:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_StandardMarketWithPriceLogger_$3549_$returns$_t_uint256_$",
                              "typeString": "function (contract StandardMarketWithPriceLogger) returns (uint256)"
                            }
                          },
                          "id": 4113,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2697:82:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4114,
                        "nodeType": "ExpressionStatement",
                        "src": "2697:82:18"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 4086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4082,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4079,
                      "src": "2423:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4083,
                          "name": "categoricalEvent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4005,
                          "src": "2427:16:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                            "typeString": "contract CategoricalEvent"
                          }
                        },
                        "id": 4084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getOutcomeCount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 331,
                        "src": "2427:32:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                          "typeString": "function () view external returns (uint8)"
                        }
                      },
                      "id": 4085,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2427:34:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "2423:38:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4116,
                  "initializationExpression": {
                    "assignments": [
                      4079
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4079,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4116,
                        "src": "2410:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4078,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "2410:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4081,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2420:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2410:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2463:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4087,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4079,
                        "src": "2463:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4089,
                    "nodeType": "ExpressionStatement",
                    "src": "2463:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "2405:385:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4117,
                      "name": "creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4000,
                      "src": "2799:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4118,
                      "name": "_creator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4031,
                      "src": "2809:8:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2799:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4120,
                  "nodeType": "ExpressionStatement",
                  "src": "2799:18:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4121,
                      "name": "tradingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4007,
                      "src": "2827:13:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4122,
                      "name": "_tradingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4051,
                      "src": "2843:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2827:30:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4124,
                  "nodeType": "ExpressionStatement",
                  "src": "2827:30:18"
                }
              ]
            },
            "documentation": "@dev Constructor creates events and markets for futarchy oracle\n @param _creator Oracle creator\n @param eventFactory Event factory contract\n @param collateralToken Tokens used as collateral in exchange for outcome tokens\n @param oracle Oracle contract used to resolve the event\n @param outcomeCount Number of event outcomes\n @param lowerBound Lower bound for event outcome\n @param upperBound Lower bound for event outcome\n @param marketFactory Market factory contract\n @param marketMaker Market maker contract\n @param fee Market fee\n @param _tradingPeriod Trading period before decision can be determined\n @param startDate Start date for price logging",
            "id": 4126,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 4056,
                    "name": "proxied",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4029,
                    "src": "2099:7:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4057,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4055,
                  "name": "Proxy",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 6828,
                  "src": "2093:5:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Proxy_$6828_$",
                    "typeString": "type(contract Proxy)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2093:14:18"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4029,
                  "name": "proxied",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1706:15:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4028,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1706:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4031,
                  "name": "_creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1731:16:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4030,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1731:7:18",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4033,
                  "name": "eventFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1757:25:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_EventFactory_$602",
                    "typeString": "contract EventFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4032,
                    "name": "EventFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 602,
                    "src": "1757:12:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_EventFactory_$602",
                      "typeString": "contract EventFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4035,
                  "name": "collateralToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1792:21:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$7778",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4034,
                    "name": "ERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 7778,
                    "src": "1792:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$7778",
                      "typeString": "contract ERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4037,
                  "name": "oracle",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1823:13:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Oracle_$4841",
                    "typeString": "contract Oracle"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4036,
                    "name": "Oracle",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 4841,
                    "src": "1823:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Oracle_$4841",
                      "typeString": "contract Oracle"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4039,
                  "name": "outcomeCount",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1846:18:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4038,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1846:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4041,
                  "name": "lowerBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1874:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4040,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "1874:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4043,
                  "name": "upperBound",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1898:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4042,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "1898:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4045,
                  "name": "marketFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1922:50:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                    "typeString": "contract StandardMarketWithPriceLoggerFactory"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4044,
                    "name": "StandardMarketWithPriceLoggerFactory",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3622,
                    "src": "1922:36:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StandardMarketWithPriceLoggerFactory_$3622",
                      "typeString": "contract StandardMarketWithPriceLoggerFactory"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4047,
                  "name": "marketMaker",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "1982:23:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_MarketMaker_$1606",
                    "typeString": "contract MarketMaker"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 4046,
                    "name": "MarketMaker",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1606,
                    "src": "1982:11:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_MarketMaker_$1606",
                      "typeString": "contract MarketMaker"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4049,
                  "name": "fee",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2015:10:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint24",
                    "typeString": "uint24"
                  },
                  "typeName": {
                    "id": 4048,
                    "name": "uint24",
                    "nodeType": "ElementaryTypeName",
                    "src": "2015:6:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint24",
                      "typeString": "uint24"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4051,
                  "name": "_tradingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2035:19:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4050,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4053,
                  "name": "startDate",
                  "nodeType": "VariableDeclaration",
                  "scope": 4126,
                  "src": "2064:14:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4052,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2064:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1696:388:18"
            },
            "returnParameters": {
              "id": 4058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2127:0:18"
            },
            "scope": 4127,
            "src": "1685:1179:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4381,
        "src": "876:1990:18"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4128,
              "name": "Proxied",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6798,
              "src": "3033:7:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Proxied_$6798",
                "typeString": "contract Proxied"
              }
            },
            "id": 4129,
            "nodeType": "InheritanceSpecifier",
            "src": "3033:7:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4130,
              "name": "Oracle",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4841,
              "src": "3042:6:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Oracle_$4841",
                "typeString": "contract Oracle"
              }
            },
            "id": 4131,
            "nodeType": "InheritanceSpecifier",
            "src": "3042:6:18"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4132,
              "name": "FutarchyOracleData",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4023,
              "src": "3050:18:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FutarchyOracleData_$4023",
                "typeString": "contract FutarchyOracleData"
              }
            },
            "id": 4133,
            "nodeType": "InheritanceSpecifier",
            "src": "3050:18:18"
          }
        ],
        "contractDependencies": [
          4023,
          4841,
          6798
        ],
        "contractKind": "contract",
        "documentation": "@title Futarchy oracle contract - Allows to create an oracle based on market behaviour\n @author Stefan George - <stefan@gnosis.pm>",
        "fullyImplemented": true,
        "id": 4380,
        "linearizedBaseContracts": [
          4380,
          4023,
          4841,
          6798
        ],
        "name": "FutarchyOracle",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4135,
            "libraryName": {
              "contractScope": null,
              "id": 4134,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7381,
              "src": "3081:8:18",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$7381",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "3075:21:18",
            "typeName": null
          },
          {
            "body": {
              "id": 4214,
              "nodeType": "Block",
              "src": "3308:671:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4147,
                              "name": "creator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4000,
                              "src": "3405:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4149,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "3422:4:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                    "typeString": "contract FutarchyOracle"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                    "typeString": "contract FutarchyOracle"
                                  }
                                ],
                                "id": 4148,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3414:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3414:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4151,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3429:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4143,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3357:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4144,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "collateralToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 194,
                                "src": "3357:32:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                  "typeString": "function () view external returns (contract ERC20)"
                                }
                              },
                              "id": 4145,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3357:34:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$7778",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 4146,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7511,
                            "src": "3357:47:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3357:80:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4158,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3508:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                ],
                                "id": 4157,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3500:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 4159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3500:25:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4160,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3527:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4153,
                                  "name": "categoricalEvent",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4005,
                                  "src": "3457:16:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                    "typeString": "contract CategoricalEvent"
                                  }
                                },
                                "id": 4154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "collateralToken",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 194,
                                "src": "3457:32:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                  "typeString": "function () view external returns (contract ERC20)"
                                }
                              },
                              "id": 4155,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3457:34:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$7778",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 4156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "approve",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7476,
                            "src": "3457:42:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 4161,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3457:78:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3357:178:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4142,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "3346:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3346:190:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4164,
                  "nodeType": "ExpressionStatement",
                  "src": "3346:190:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4168,
                        "name": "funding",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4137,
                        "src": "3578:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4165,
                        "name": "categoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4005,
                        "src": "3546:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      "id": 4167,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "buyAllOutcomes",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 251,
                      "src": "3546:31:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256) external"
                      }
                    },
                    "id": 4169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3546:40:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4170,
                  "nodeType": "ExpressionStatement",
                  "src": "3546:40:18"
                },
                {
                  "body": {
                    "id": 4208,
                    "nodeType": "Block",
                    "src": "3710:224:18",
                    "statements": [
                      {
                        "assignments": [
                          4183
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4183,
                            "name": "market",
                            "nodeType": "VariableDeclaration",
                            "scope": 4208,
                            "src": "3724:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Market_$2296",
                              "typeString": "contract Market"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 4182,
                              "name": "Market",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 2296,
                              "src": "3724:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Market_$2296",
                                "typeString": "contract Market"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4187,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 4184,
                            "name": "markets",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4003,
                            "src": "3740:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                              "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                            }
                          },
                          "id": 4186,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 4185,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4172,
                            "src": "3748:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3740:10:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                            "typeString": "contract StandardMarketWithPriceLogger"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3724:26:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4196,
                                      "name": "market",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4183,
                                      "src": "3871:6:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Market_$2296",
                                        "typeString": "contract Market"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Market_$2296",
                                        "typeString": "contract Market"
                                      }
                                    ],
                                    "id": 4195,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3863:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": "address"
                                  },
                                  "id": 4197,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3863:15:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 4198,
                                  "name": "funding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4137,
                                  "src": "3880:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 4189,
                                          "name": "market",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4183,
                                          "src": "3814:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Market_$2296",
                                            "typeString": "contract Market"
                                          }
                                        },
                                        "id": 4190,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "eventContract",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2214,
                                        "src": "3814:20:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                                          "typeString": "function () view external returns (contract Event)"
                                        }
                                      },
                                      "id": 4191,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3814:22:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Event_$392",
                                        "typeString": "contract Event"
                                      }
                                    },
                                    "id": 4192,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "collateralToken",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 194,
                                    "src": "3814:38:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                      "typeString": "function () view external returns (contract ERC20)"
                                    }
                                  },
                                  "id": 4193,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3814:40:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$7778",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 4194,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "approve",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7476,
                                "src": "3814:48:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 4199,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3814:74:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 4188,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              7923,
                              7924
                            ],
                            "referencedDeclaration": 7923,
                            "src": "3806:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 4200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3806:83:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4201,
                        "nodeType": "ExpressionStatement",
                        "src": "3806:83:18"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4205,
                              "name": "funding",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4137,
                              "src": "3915:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4202,
                              "name": "market",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4183,
                              "src": "3903:6:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Market_$2296",
                                "typeString": "contract Market"
                              }
                            },
                            "id": 4204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "fund",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2237,
                            "src": "3903:11:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) external"
                            }
                          },
                          "id": 4206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3903:20:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4207,
                        "nodeType": "ExpressionStatement",
                        "src": "3903:20:18"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4175,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4172,
                      "src": "3685:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4176,
                        "name": "markets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4003,
                        "src": "3689:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                          "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                        }
                      },
                      "id": 4177,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3689:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3685:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4209,
                  "initializationExpression": {
                    "assignments": [
                      4172
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4172,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4209,
                        "src": "3672:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4171,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3672:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4174,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4173,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3682:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3672:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4180,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3705:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4179,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4172,
                        "src": "3705:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4181,
                    "nodeType": "ExpressionStatement",
                    "src": "3705:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "3667:267:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4211,
                        "name": "funding",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4137,
                        "src": "3964:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4210,
                      "name": "FutarchyFunding",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3989,
                      "src": "3948:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3948:24:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4213,
                  "nodeType": "EmitStatement",
                  "src": "3943:29:18"
                }
              ]
            },
            "documentation": "@dev Funds all markets with equal amount of funding\n @param funding Amount of funding",
            "id": 4215,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4140,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4139,
                  "name": "isCreator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4022,
                  "src": "3294:9:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3294:9:18"
              }
            ],
            "name": "fund",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4138,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4137,
                  "name": "funding",
                  "nodeType": "VariableDeclaration",
                  "scope": 4215,
                  "src": "3257:12:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4136,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3257:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3256:14:18"
            },
            "returnParameters": {
              "id": 4141,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3308:0:18"
            },
            "scope": 4380,
            "src": "3243:736:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4283,
              "nodeType": "Block",
              "src": "4150:701:18",
              "statements": [
                {
                  "assignments": [
                    4221
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4221,
                      "name": "market",
                      "nodeType": "VariableDeclaration",
                      "scope": 4283,
                      "src": "4201:13:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Market_$2296",
                        "typeString": "contract Market"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 4220,
                        "name": "Market",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 2296,
                        "src": "4201:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4228,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 4222,
                      "name": "markets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4003,
                      "src": "4217:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                        "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                      }
                    },
                    "id": 4227,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 4224,
                            "name": "getOutcome",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4379
                            ],
                            "referencedDeclaration": 4379,
                            "src": "4230:10:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$",
                              "typeString": "function () view returns (int256)"
                            }
                          },
                          "id": 4225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4230:12:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        ],
                        "id": 4223,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4225:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 4226,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4225:18:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4217:27:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                      "typeString": "contract StandardMarketWithPriceLogger"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4201:43:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4238,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4230,
                              "name": "categoricalEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4005,
                              "src": "4262:16:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                "typeString": "contract CategoricalEvent"
                              }
                            },
                            "id": 4231,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isOutcomeSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 198,
                            "src": "4262:29:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 4232,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4262:31:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4233,
                                  "name": "market",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4221,
                                  "src": "4297:6:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Market_$2296",
                                    "typeString": "contract Market"
                                  }
                                },
                                "id": 4234,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "eventContract",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2214,
                                "src": "4297:20:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                                  "typeString": "function () view external returns (contract Event)"
                                }
                              },
                              "id": 4235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4297:22:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Event_$392",
                                "typeString": "contract Event"
                              }
                            },
                            "id": 4236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "isOutcomeSet",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 198,
                            "src": "4297:35:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$",
                              "typeString": "function () view external returns (bool)"
                            }
                          },
                          "id": 4237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4297:37:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "4262:72:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "4254:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4254:81:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4240,
                  "nodeType": "ExpressionStatement",
                  "src": "4254:81:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4241,
                        "name": "market",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4221,
                        "src": "4439:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "id": 4243,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "close",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2240,
                      "src": "4439:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$__$",
                        "typeString": "function () external"
                      }
                    },
                    "id": 4244,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4439:14:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4245,
                  "nodeType": "ExpressionStatement",
                  "src": "4439:14:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4246,
                            "name": "market",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4221,
                            "src": "4463:6:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Market_$2296",
                              "typeString": "contract Market"
                            }
                          },
                          "id": 4248,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "eventContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2214,
                          "src": "4463:20:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Event_$392_$",
                            "typeString": "function () view external returns (contract Event)"
                          }
                        },
                        "id": 4249,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4463:22:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Event_$392",
                          "typeString": "contract Event"
                        }
                      },
                      "id": 4250,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemWinnings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 391,
                      "src": "4463:37:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4463:39:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4252,
                  "nodeType": "ExpressionStatement",
                  "src": "4463:39:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4253,
                        "name": "market",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4221,
                        "src": "4512:6:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Market_$2296",
                          "typeString": "contract Market"
                        }
                      },
                      "id": 4255,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "withdrawFees",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2245,
                      "src": "4512:19:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4512:21:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4257,
                  "nodeType": "ExpressionStatement",
                  "src": "4512:21:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4258,
                        "name": "categoricalEvent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4005,
                        "src": "4647:16:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                          "typeString": "contract CategoricalEvent"
                        }
                      },
                      "id": 4260,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "redeemWinnings",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 141,
                      "src": "4647:31:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 4261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4647:33:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4262,
                  "nodeType": "ExpressionStatement",
                  "src": "4647:33:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4268,
                            "name": "creator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4000,
                            "src": "4742:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4274,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8024,
                                    "src": "4804:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                      "typeString": "contract FutarchyOracle"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_FutarchyOracle_$4380",
                                      "typeString": "contract FutarchyOracle"
                                    }
                                  ],
                                  "id": 4273,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4796:7:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 4275,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4796:13:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4269,
                                    "name": "categoricalEvent",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4005,
                                    "src": "4751:16:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                      "typeString": "contract CategoricalEvent"
                                    }
                                  },
                                  "id": 4270,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "collateralToken",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 194,
                                  "src": "4751:32:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                    "typeString": "function () view external returns (contract ERC20)"
                                  }
                                },
                                "id": 4271,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4751:34:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20_$7778",
                                  "typeString": "contract ERC20"
                                }
                              },
                              "id": 4272,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "balanceOf",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7422,
                              "src": "4751:44:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view external returns (uint256)"
                              }
                            },
                            "id": 4276,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4751:59:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4264,
                                "name": "categoricalEvent",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4005,
                                "src": "4698:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CategoricalEvent_$158",
                                  "typeString": "contract CategoricalEvent"
                                }
                              },
                              "id": 4265,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "collateralToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 194,
                              "src": "4698:32:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_ERC20_$7778_$",
                                "typeString": "function () view external returns (contract ERC20)"
                              }
                            },
                            "id": 4266,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4698:34:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$7778",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 4267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7441,
                          "src": "4698:43:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 4277,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4698:113:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4263,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "4690:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4690:122:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4279,
                  "nodeType": "ExpressionStatement",
                  "src": "4690:122:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 4280,
                      "name": "FutarchyClosing",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3991,
                      "src": "4827:15:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4827:17:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4282,
                  "nodeType": "EmitStatement",
                  "src": "4822:22:18"
                }
              ]
            },
            "documentation": "@dev Closes market for winning outcome and redeems winnings and sends all collateral tokens to creator",
            "id": 4284,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4218,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4217,
                  "name": "isCreator",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4022,
                  "src": "4136:9:18",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4136:9:18"
              }
            ],
            "name": "close",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4216,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4110:2:18"
            },
            "returnParameters": {
              "id": 4219,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4150:0:18"
            },
            "scope": 4380,
            "src": "4096:755:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4360,
              "nodeType": "Block",
              "src": "4991:676:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 4289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5070:6:18",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 4288,
                            "name": "isSet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4011,
                            "src": "5071:5:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4298,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 4290,
                                    "name": "markets",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4003,
                                    "src": "5080:7:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                      "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                                    }
                                  },
                                  "id": 4292,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 4291,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5088:1:18",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5080:10:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                    "typeString": "contract StandardMarketWithPriceLogger"
                                  }
                                },
                                "id": 4293,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "startDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3277,
                                "src": "5080:20:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                                  "typeString": "function () view external returns (uint256)"
                                }
                              },
                              "id": 4294,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5080:22:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 4295,
                              "name": "tradingPeriod",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4007,
                              "src": "5105:13:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5080:38:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4297,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7922,
                            "src": "5121:3:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5080:44:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5070:54:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4287,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        7923,
                        7924
                      ],
                      "referencedDeclaration": 7923,
                      "src": "5062:7:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4300,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5062:63:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4301,
                  "nodeType": "ExpressionStatement",
                  "src": "5062:63:18"
                },
                {
                  "assignments": [
                    4303
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4303,
                      "name": "highestAvgPrice",
                      "nodeType": "VariableDeclaration",
                      "scope": 4360,
                      "src": "5210:20:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4302,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5210:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4309,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 4304,
                          "name": "markets",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4003,
                          "src": "5233:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                            "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                          }
                        },
                        "id": 4306,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5241:1:18",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5233:10:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                          "typeString": "contract StandardMarketWithPriceLogger"
                        }
                      },
                      "id": 4307,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getAvgPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3514,
                      "src": "5233:22:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 4308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5233:24:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5210:47:18"
                },
                {
                  "assignments": [
                    4311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4311,
                      "name": "highestIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 4360,
                      "src": "5267:17:18",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4310,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5267:4:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4313,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 4312,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5287:1:18",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5267:21:18"
                },
                {
                  "body": {
                    "id": 4346,
                    "nodeType": "Block",
                    "src": "5341:203:18",
                    "statements": [
                      {
                        "assignments": [
                          4326
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4326,
                            "name": "avgPrice",
                            "nodeType": "VariableDeclaration",
                            "scope": 4346,
                            "src": "5355:13:18",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4325,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "5355:4:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4332,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 4327,
                                "name": "markets",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4003,
                                "src": "5371:7:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                                  "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                                }
                              },
                              "id": 4329,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 4328,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4315,
                                "src": "5379:1:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5371:10:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_StandardMarketWithPriceLogger_$3549",
                                "typeString": "contract StandardMarketWithPriceLogger"
                              }
                            },
                            "id": 4330,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAvgPrice",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3514,
                            "src": "5371:22:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 4331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5371:24:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5355:40:18"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4333,
                            "name": "avgPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4326,
                            "src": "5413:8:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4334,
                            "name": "highestAvgPrice",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4303,
                            "src": "5424:15:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5413:26:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 4345,
                        "nodeType": "IfStatement",
                        "src": "5409:125:18",
                        "trueBody": {
                          "id": 4344,
                          "nodeType": "Block",
                          "src": "5441:93:18",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4336,
                                  "name": "highestAvgPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4303,
                                  "src": "5459:15:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4337,
                                  "name": "avgPrice",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4326,
                                  "src": "5477:8:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5459:26:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4339,
                              "nodeType": "ExpressionStatement",
                              "src": "5459:26:18"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4342,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4340,
                                  "name": "highestIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4311,
                                  "src": "5503:12:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 4341,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4315,
                                  "src": "5518:1:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "5503:16:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4343,
                              "nodeType": "ExpressionStatement",
                              "src": "5503:16:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4318,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4315,
                      "src": "5316:1:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 4319,
                        "name": "markets",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4003,
                        "src": "5320:7:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_StandardMarketWithPriceLogger_$3549_$dyn_storage",
                          "typeString": "contract StandardMarketWithPriceLogger[] storage ref"
                        }
                      },
                      "id": 4320,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5320:14:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5316:18:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4347,
                  "initializationExpression": {
                    "assignments": [
                      4315
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4315,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 4347,
                        "src": "5303:7:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 4314,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "5303:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 4317,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 4316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5313:1:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "5303:11:18"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 4323,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "5336:3:18",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 4322,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4315,
                        "src": "5336:1:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 4324,
                    "nodeType": "ExpressionStatement",
                    "src": "5336:3:18"
                  },
                  "nodeType": "ForStatement",
                  "src": "5298:246:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4350,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4348,
                      "name": "winningMarketIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4009,
                      "src": "5553:18:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 4349,
                      "name": "highestIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4311,
                      "src": "5574:12:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5553:33:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4351,
                  "nodeType": "ExpressionStatement",
                  "src": "5553:33:18"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4352,
                      "name": "isSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4011,
                      "src": "5596:5:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 4353,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5604:4:18",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5596:12:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4355,
                  "nodeType": "ExpressionStatement",
                  "src": "5596:12:18"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4357,
                        "name": "winningMarketIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4009,
                        "src": "5641:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4356,
                      "name": "OutcomeAssignment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3995,
                      "src": "5623:17:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 4358,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5623:37:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4359,
                  "nodeType": "EmitStatement",
                  "src": "5618:42:18"
                }
              ]
            },
            "documentation": "@dev Allows to set the oracle outcome based on the market with largest long position",
            "id": 4361,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setOutcome",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4969:2:18"
            },
            "returnParameters": {
              "id": 4286,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4991:0:18"
            },
            "scope": 4380,
            "src": "4950:717:18",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4368,
              "nodeType": "Block",
              "src": "5831:29:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4366,
                    "name": "isSet",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4011,
                    "src": "5848:5:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 4365,
                  "id": 4367,
                  "nodeType": "Return",
                  "src": "5841:12:18"
                }
              ]
            },
            "documentation": "@dev Returns if winning outcome is set\n @return Is outcome set?",
            "id": 4369,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOutcomeSet",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4362,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5773:2:18"
            },
            "returnParameters": {
              "id": 4365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4364,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4369,
                  "src": "5821:4:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4363,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5821:4:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5820:6:18"
            },
            "scope": 4380,
            "src": "5752:108:18",
            "stateMutability": "view",
            "superFunction": 4835,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4378,
              "nodeType": "Block",
              "src": "6003:47:18",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4375,
                        "name": "winningMarketIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4009,
                        "src": "6024:18:18",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4374,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "6020:3:18",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_int256_$",
                        "typeString": "type(int256)"
                      },
                      "typeName": "int"
                    },
                    "id": 4376,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6020:23:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 4373,
                  "id": 4377,
                  "nodeType": "Return",
                  "src": "6013:30:18"
                }
              ]
            },
            "documentation": "@dev Returns winning outcome\n @return Outcome",
            "id": 4379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOutcome",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4370,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5946:2:18"
            },
            "returnParameters": {
              "id": 4373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4372,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4379,
                  "src": "5994:3:18",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 4371,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "5994:3:18",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5993:5:18"
            },
            "scope": 4380,
            "src": "5927:123:18",
            "stateMutability": "view",
            "superFunction": 4840,
            "visibility": "public"
          }
        ],
        "scope": 4381,
        "src": "3006:3046:18"
      }
    ],
    "src": "0:6053:18"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.6+commit.b259423e.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0x9ecf85309edaedf74d722120b33a9ea9fa1a6a52",
      "transactionHash": "0x52087715112039c4c2a27692d742b0d7674f57c017a627a2fb58369683fc0a68"
    },
    "4": {
      "events": {},
      "links": {},
      "address": "0x8195accf76288a0f3a067dcf034094452261b231",
      "transactionHash": "0x86ec1b7206c04ae1c65ea1e7e3225ab9fba3dc951753b52b4913aa61890986d4"
    },
    "42": {
      "events": {},
      "links": {},
      "address": "0x6f54658e5c43f7d00a94b60cb3f666a480c46283",
      "transactionHash": "0x28bd51951c3ea694d87b176d95e067d2759f23ae3b27a5ba8352a3c7c32264a4"
    },
    "437894314312": {
      "events": {},
      "links": {},
      "address": "0xd833215cbcc3f914bd1c9ece3ee7bf8b14f841bb",
      "transactionHash": "0xc70c607c64d6a5403a6244cb7a8a173e7d496811ee35a20a4aca1527bc97e507"
    }
  },
  "schemaVersion": "3.0.11",
  "updatedAt": "2019-09-20T17:46:52.193Z",
  "devdoc": {
    "author": "Stefan George - <stefan@gnosis.pm>",
    "methods": {
      "close()": {
        "details": "Closes market for winning outcome and redeems winnings and sends all collateral tokens to creator"
      },
      "fund(uint256)": {
        "details": "Funds all markets with equal amount of funding",
        "params": {
          "funding": "Amount of funding"
        }
      },
      "getOutcome()": {
        "details": "Returns winning outcome",
        "return": "Outcome"
      },
      "isOutcomeSet()": {
        "details": "Returns if winning outcome is set",
        "return": "Is outcome set?"
      },
      "setOutcome()": {
        "details": "Allows to set the oracle outcome based on the market with largest long position"
      }
    },
    "title": "Futarchy oracle contract - Allows to create an oracle based on market behaviour"
  },
  "userdoc": {
    "methods": {}
  }
}