{
  "contractName": "Minter",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "epochStart",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fathomToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "reward",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "waitingPeriod",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "closestDistance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "epochLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "conceptRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "winner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "epochHash",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "coinbase",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_conceptRegistry",
          "type": "address"
        },
        {
          "name": "_epochLength",
          "type": "uint256"
        },
        {
          "name": "_waitingPeriod",
          "type": "uint256"
        },
        {
          "name": "_reward",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "oldReward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "newReward",
          "type": "uint256"
        }
      ],
      "name": "NewReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "oldLength",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "newLength",
          "type": "uint256"
        }
      ],
      "name": "NewEpochLength",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensMinted",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_fathomToken",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_assessor",
          "type": "address"
        },
        {
          "name": "_assessment",
          "type": "address"
        },
        {
          "name": "_tokenSalt",
          "type": "uint256"
        }
      ],
      "name": "submitTicket",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_assessor",
          "type": "address"
        },
        {
          "name": "_assessment",
          "type": "address"
        },
        {
          "name": "_tokenSalt",
          "type": "uint256"
        },
        {
          "name": "_assessmentSalt",
          "type": "bytes32"
        }
      ],
      "name": "getTicketDistance",
      "outputs": [
        {
          "name": "distance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "endEpoch",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "setCoinbase",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_reward",
          "type": "uint256"
        }
      ],
      "name": "setReward",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "setEpochLength",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_waitingPeriod",
          "type": "uint256"
        }
      ],
      "name": "setWaitingPeriod",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.0+commit.1d4f565a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[],\"name\":\"endEpoch\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"epochStart\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fathomToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_fathomToken\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"setCoinbase\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reward\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_reward\",\"type\":\"uint256\"}],\"name\":\"setReward\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"waitingPeriod\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"closestDistance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"setEpochLength\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"epochLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_waitingPeriod\",\"type\":\"uint256\"}],\"name\":\"setWaitingPeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"conceptRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_assessor\",\"type\":\"address\"},{\"name\":\"_assessment\",\"type\":\"address\"},{\"name\":\"_tokenSalt\",\"type\":\"uint256\"},{\"name\":\"_assessmentSalt\",\"type\":\"bytes32\"}],\"name\":\"getTicketDistance\",\"outputs\":[{\"name\":\"distance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"winner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"epochHash\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_assessor\",\"type\":\"address\"},{\"name\":\"_assessment\",\"type\":\"address\"},{\"name\":\"_tokenSalt\",\"type\":\"uint256\"}],\"name\":\"submitTicket\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"coinbase\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_conceptRegistry\",\"type\":\"address\"},{\"name\":\"_epochLength\",\"type\":\"uint256\"},{\"name\":\"_waitingPeriod\",\"type\":\"uint256\"},{\"name\":\"_reward\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldReward\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newReward\",\"type\":\"uint256\"}],\"name\":\"NewReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldLength\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newLength\",\"type\":\"uint256\"}],\"name\":\"NewEpochLength\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TokensMinted\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"getTicketDistance(address,address,uint256,bytes32)\":{\"params\":{\"_assessmentSalt\":\"Taken from assessment, generated by XOR-ing the salts of all revealing assessors\",\"_tokenSalt\":\"A number smaller than the amount of tokens staked by the assessor\"},\"return\":\"the distance to the target hash of a given ticket\"},\"init(address)\":{\"details\":\"will be called during network deployment\"}}},\"userdoc\":{\"methods\":{\"endEpoch()\":{\"notice\":\"Called by anyone to end the current epoch, start the next one and trigger a payout to the winner\"},\"setCoinbase(address)\":{\"notice\":\"Called by participants to redirect their rewards\"}},\"notice\":\"Contract to manage the minting of new network tokens. New Tokens are minted once per a user-defined timeperiod (epoch) and are distributed in a lottery. Tickets can be submitted for assessors who have completed assessments as part of the majority, in the current epoch.\"}},\"settings\":{\"compilationTarget\":{\"/builds/fathom/assess/contracts/contracts/Minter.sol\":\"Minter\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/builds/fathom/assess/contracts/contracts/Assessment.sol\":{\"keccak256\":\"0x38e344165281f6b705d538b5b1e36c9f2000896abb0e66a0e365009dfcb154ba\",\"urls\":[\"bzzr://6de365b6fcd48d7ecb26877ce7446f74c7116a66c79f97bad235c17324787cdf\"]},\"/builds/fathom/assess/contracts/contracts/AssessmentData.sol\":{\"keccak256\":\"0xda71f848916d4c5c519b9bb0cbd80fff3ebdf66d93205bbd47aa746fb7ea3149\",\"urls\":[\"bzzr://3f315e743c548f163c24067c7e11e1f9783123d02ae96390640b65bb6664443d\"]},\"/builds/fathom/assess/contracts/contracts/AssessmentProxy.sol\":{\"keccak256\":\"0x1ad6915fbc6c7ab4d0c5a3c9fddd262ff1899b80f812ef5ef1d774dfe26dfde2\",\"urls\":[\"bzzr://803ff846e154c773e8e8f0cd69cf7142b1b7d500553f6d1c253efde0d4c51297\"]},\"/builds/fathom/assess/contracts/contracts/Concept.sol\":{\"keccak256\":\"0x89c39768cf2aa6cd14f08b619c9981fbe6140d8ed926003fa72e9a07feb81533\",\"urls\":[\"bzzr://49884001aa3460e710b5d8704b055e282703516ae945469b161edea7a091415c\"]},\"/builds/fathom/assess/contracts/contracts/ConceptData.sol\":{\"keccak256\":\"0xba5f44d67c4d25679f7ce9ae139145bca84f85ea53405ae258d1f6c79f68aef9\",\"urls\":[\"bzzr://614dbf61f171bddf5d29eb27396e012d8dae15d22314652df38a92d1b5a43f5a\"]},\"/builds/fathom/assess/contracts/contracts/ConceptProxy.sol\":{\"keccak256\":\"0xed6cf5d2434e41b7c5feef082320abfc4725347802465516760b6e082bba2fb1\",\"urls\":[\"bzzr://5e9c8a3f8da6ec7ba5eac85b39942d590b69863029310ca8dbecfed477b57cc7\"]},\"/builds/fathom/assess/contracts/contracts/ConceptRegistry.sol\":{\"keccak256\":\"0x37b9ea893f2e3714ed9e386871f16aff98621f6aac2c99214cddf1ddb286462c\",\"urls\":[\"bzzr://fe2531b7de74f5795710a510315edd555d208c8e18c7efbb5c28256aa47386f4\"]},\"/builds/fathom/assess/contracts/contracts/FathomToken.sol\":{\"keccak256\":\"0xd70c8cc96ac35367bebb4ecca938968b4b585ce5ac344540b538b4e08480a4c4\",\"urls\":[\"bzzr://be7d78ab6ae00ed2e18e7df4344cb062c79566e4b94a90502fd567e97b3af9d3\"]},\"/builds/fathom/assess/contracts/contracts/Math.sol\":{\"keccak256\":\"0x0e89dc6b2d825d93107a5c9b32312b94e18cb8e693aa8e0332a8f17d118ba207\",\"urls\":[\"bzzr://2dc75be49f09ed441c84240522225c9ceccc7577d3fad4bb5d39b0666947227c\"]},\"/builds/fathom/assess/contracts/contracts/Minter.sol\":{\"keccak256\":\"0x5c6a9bbd37b0f935ee951bf87fb8f4494555e3e98c99049c51234b383dbcf3a0\",\"urls\":[\"bzzr://a4ef613b4eb19182a63b3375aaedc1a455ce290dc23406c998742f1467a6ce1f\"]},\"/builds/fathom/assess/contracts/contracts/Proxy.sol\":{\"keccak256\":\"0xca112dd4cad6b82624ac9899cbb869884c78cf0a1b08a3efc0767d93f06a1d7c\",\"urls\":[\"bzzr://b4087ee1320cc97a872fb849fd9c7f0b1c2faf43c6b681ddcd77ad705060fcd6\"]},\"/builds/fathom/assess/contracts/contracts/ProxyFactory.sol\":{\"keccak256\":\"0x19e6c1094d0556a918710647e757f878a02750ae61d182aeae8168e864f39725\",\"urls\":[\"bzzr://ec7eeaee9c749149f541e4f61421acb4bd969344a586508a3eee9da67492df06\"]},\"/builds/fathom/assess/contracts/contracts/lib/openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x1aad84a4229d5da4b9ffb4433c58b2a91ba9ffbd7b11af0500f9a9795869d865\",\"urls\":[\"bzzr://b8e6b572cd2f7e04b58bf072ec24bbef7914c947e232a390cb8f07ffb1bc8157\"]},\"/builds/fathom/assess/contracts/contracts/lib/openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol\":{\"keccak256\":\"0xc6f4c1d0822f8a8a78e0cb49fdb716acf26a7356109c4dcc6d5836b873e50b2d\",\"urls\":[\"bzzr://7f6656657ed55a5f0836a10b3e8517eddd25c0b9989c78b80a29075c304b20bd\"]},\"/builds/fathom/assess/contracts/contracts/lib/openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xe0490847690823c25e2e258c1f4689b54e6d051f784aca8ef2da8c0789f2be8a\",\"urls\":[\"bzzr://d324bd158255fbdb33d2294fd179a3b0456b72d31c2ba3212b428acfc18dcf88\"]},\"/builds/fathom/assess/contracts/contracts/lib/openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol\":{\"keccak256\":\"0x225613675e94acc479c38897f053e94f287a57730bb8a56ccae598074dd4469b\",\"urls\":[\"bzzr://80293b34ebc97ac3a32572451170e70d31c93f896cbd85d249b13362978ea11f\"]},\"/builds/fathom/assess/contracts/contracts/lib/openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol\":{\"keccak256\":\"0x275f9b31e4ad7f868d8bd4a8e85e2bb68d1bed3b28e919e95df08310ff4de93d\",\"urls\":[\"bzzr://4eb59cdd2161bd6e9a02c3f0e735e285723f14963cae565c3543c38ccc3bb47d\"]}},\"version\":1}",
  "bytecode": "0x608060405260001960095534801561001657600080fd5b506040516080806113758339810180604052608081101561003657600080fd5b5080516020820151604083015160609093015160078054600160a060020a031916600160a060020a0385161790556004829055426002908155929391928202831161010857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f77616974696e6720706572696f64206d757374206265206174206d6f7374206860448201527f616c66206f662065706f63680000000000000000000000000000000000000000606482015290519081900360840190fd5b600591909155600019430140600355600155505060008054600160a060020a031916331790556112388061013d6000396000f3fe6080604052600436106101035763ffffffff60e060020a6000350416630b9663db811461010857806313af40351461011f578063158ef93e1461015257806315e5a1e51461017b5780631684ae4d146101a257806319ab453c146101d35780631da420cd14610206578063228cb73314610239578063293be4561461024e5780633a2ef9df1461027857806343f8be511461028d57806354eea796146102a257806357d775f8146102cc5780636964c282146102e15780637654e9211461030b5780638da5cb5b146103205780639cda46a814610335578063dfbf53ae1461037e578063e040eb5914610393578063f9958e68146103a8578063ff483c54146103eb575b600080fd5b34801561011457600080fd5b5061011d61041e565b005b34801561012b57600080fd5b5061011d6004803603602081101561014257600080fd5b5035600160a060020a031661064f565b34801561015e57600080fd5b506101676106ce565b604080519115158252519081900360200190f35b34801561018757600080fd5b506101906106ef565b60408051918252519081900360200190f35b3480156101ae57600080fd5b506101b76106f5565b60408051600160a060020a039092168252519081900360200190f35b3480156101df57600080fd5b5061011d600480360360208110156101f657600080fd5b5035600160a060020a0316610704565b34801561021257600080fd5b5061011d6004803603602081101561022957600080fd5b5035600160a060020a031661078b565b34801561024557600080fd5b506101906107c7565b34801561025a57600080fd5b5061011d6004803603602081101561027157600080fd5b50356107cd565b34801561028457600080fd5b50610190610822565b34801561029957600080fd5b50610190610828565b3480156102ae57600080fd5b5061011d600480360360208110156102c557600080fd5b503561082e565b3480156102d857600080fd5b50610190610883565b3480156102ed57600080fd5b5061011d6004803603602081101561030457600080fd5b5035610889565b34801561031757600080fd5b506101b7610960565b34801561032c57600080fd5b506101b761096f565b34801561034157600080fd5b506101906004803603608081101561035857600080fd5b50600160a060020a0381358116916020810135909116906040810135906060013561097e565b34801561038a57600080fd5b506101b76109fd565b34801561039f57600080fd5b50610190610a0c565b3480156103b457600080fd5b5061011d600480360360608110156103cb57600080fd5b50600160a060020a03813581169160208101359091169060400135610a12565b3480156103f757600080fd5b506101b76004803603602081101561040e57600080fd5b5035600160a060020a03166111d1565b600554600454600254010142116104a5576040805160e560020a62461bcd02815260206004820152602560248201527f45706f636820616e642077616974696e6720706572696f64206d75737420626560448201527f206f766572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600854600160a060020a03161561061d57600854600160a060020a039081166000908152600a602052604081205490911615156104ed57600854600160a060020a031661050c565b600854600160a060020a039081166000908152600a6020526040902054165b600654600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038086166004830152602482019390935290519394509116916340c10f19916044808201926020929091908290030181600087803b15801561058157600080fd5b505af1158015610595573d6000803e3d6000fd5b505050506040513d60208110156105ab57600080fd5b5051156105fe5760085460015460408051600160a060020a039093168352602083019190915280517f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a42739281900390910190a15b506008805473ffffffffffffffffffffffffffffffffffffffff191690555b600454600454600254420381151561063157fe5b60028054929091049290920201905560001943810140600355600955565b600054600160a060020a0316331461069f576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005474010000000000000000000000000000000000000000900460ff1681565b60025481565b600654600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1615156107885760068054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556000805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b50565b336000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b600054600160a060020a0316331461081d576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600155565b60055481565b60095481565b600054600160a060020a0316331461087e576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600455565b60045481565b600054600160a060020a031633146108d9576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600454600282021061095b576040805160e560020a62461bcd02815260206004820152602c60248201527f57616974696e6720706572696f64206d757374206265206174206d6f7374206860448201527f616c66206f662065706f63680000000000000000000000000000000000000000606482015290519081900360840190fd5b600555565b600754600160a060020a031681565b600054600160a060020a031681565b60408051600160a060020a038681166c0100000000000000000000000090810260208085019190915291871602603483015260488201859052606880830185905283518084039091018152608890920190925280519101206003546000919081106109ed5760035481036109f3565b80600354035b9695505050505050565b600854600160a060020a031681565b60035481565b6000829050600760009054906101000a9004600160a060020a0316600160a060020a031663c18e467982600160a060020a0316636732e9666040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d6020811015610aa157600080fd5b50516040805160e060020a63ffffffff8516028152600160a060020a039092166004830152516024808301926020929190829003018186803b158015610ae657600080fd5b505afa158015610afa573d6000803e3d6000fd5b505050506040513d6020811015610b1057600080fd5b50511515610b68576040805160e560020a62461bcd02815260206004820152601f60248201527f417373657373656420636f6e6365707420646f6573206e6f7420657869737400604482015290519081900360640190fd5b80600160a060020a0316636732e9666040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610ba457600080fd5b505afa158015610bb8573d6000803e3d6000fd5b505050506040513d6020811015610bce57600080fd5b5051604080517f21d39c2c000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916321d39c2c916024808301926020929190829003018186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b50511515610cb5576040805160e560020a62461bcd02815260206004820152601960248201527f4173736573736d656e7420646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b6004546002540181600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610cf857600080fd5b505afa158015610d0c573d6000803e3d6000fd5b505050506040513d6020811015610d2257600080fd5b505110610d9f576040805160e560020a62461bcd02815260206004820152602760248201527f4173736573736d656e74206d75737420656e64206265666f726520656e64206f60448201527f662065706f636800000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60025481600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610dde57600080fd5b505afa158015610df2573d6000803e3d6000fd5b505050506040513d6020811015610e0857600080fd5b505111610e85576040805160e560020a62461bcd02815260206004820152602560248201527f4173736573736d656e74206d7573742062652066726f6d2063757272656e742060448201527f65706f6368000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80600160a060020a0316639c6a1dfb6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610ec157600080fd5b505afa158015610ed5573d6000803e3d6000fd5b505050506040513d6020811015610eeb57600080fd5b50516006811115610ef857fe5b600414610f4f576040805160e560020a62461bcd02815260206004820152601c60248201527f4173736573736d656e74206d75737420626520636f6d706c6574656400000000604482015290519081900360640190fd5b80600160a060020a031663d8273f3c856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a0316815260200191505060206040518083038186803b158015610fa857600080fd5b505afa158015610fbc573d6000803e3d6000fd5b505050506040513d6020811015610fd257600080fd5b50516006811115610fdf57fe5b60041461105c576040805160e560020a62461bcd02815260206004820152602860248201527f4173736573736f72206973206e6f742070617274206f66206d616a6f7269747960448201527f20636c7573746572000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80600160a060020a03166313faede66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d60208110156110c257600080fd5b505182111561111b576040805160e560020a62461bcd02815260206004820152601560248201527f73616c74206d757374206265203c3d207374616b650000000000000000000000604482015290519081900360640190fd5b600061119085858585600160a060020a031663bfa0b1336040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561115f57600080fd5b505afa158015611173573d6000803e3d6000fd5b505050506040513d602081101561118957600080fd5b505161097e565b90506009548110156111ca5760098190556008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387161790555b5050505050565b600a60205260009081526040902054600160a060020a03168156fe4f776e657220616363657373206f6e6c79000000000000000000000000000000a165627a7a72305820d148d62d91c3f3e2a2659567abb8b2b2a02505ae462819bd922ce6b60d083dd20029",
  "deployedBytecode": "0x6080604052600436106101035763ffffffff60e060020a6000350416630b9663db811461010857806313af40351461011f578063158ef93e1461015257806315e5a1e51461017b5780631684ae4d146101a257806319ab453c146101d35780631da420cd14610206578063228cb73314610239578063293be4561461024e5780633a2ef9df1461027857806343f8be511461028d57806354eea796146102a257806357d775f8146102cc5780636964c282146102e15780637654e9211461030b5780638da5cb5b146103205780639cda46a814610335578063dfbf53ae1461037e578063e040eb5914610393578063f9958e68146103a8578063ff483c54146103eb575b600080fd5b34801561011457600080fd5b5061011d61041e565b005b34801561012b57600080fd5b5061011d6004803603602081101561014257600080fd5b5035600160a060020a031661064f565b34801561015e57600080fd5b506101676106ce565b604080519115158252519081900360200190f35b34801561018757600080fd5b506101906106ef565b60408051918252519081900360200190f35b3480156101ae57600080fd5b506101b76106f5565b60408051600160a060020a039092168252519081900360200190f35b3480156101df57600080fd5b5061011d600480360360208110156101f657600080fd5b5035600160a060020a0316610704565b34801561021257600080fd5b5061011d6004803603602081101561022957600080fd5b5035600160a060020a031661078b565b34801561024557600080fd5b506101906107c7565b34801561025a57600080fd5b5061011d6004803603602081101561027157600080fd5b50356107cd565b34801561028457600080fd5b50610190610822565b34801561029957600080fd5b50610190610828565b3480156102ae57600080fd5b5061011d600480360360208110156102c557600080fd5b503561082e565b3480156102d857600080fd5b50610190610883565b3480156102ed57600080fd5b5061011d6004803603602081101561030457600080fd5b5035610889565b34801561031757600080fd5b506101b7610960565b34801561032c57600080fd5b506101b761096f565b34801561034157600080fd5b506101906004803603608081101561035857600080fd5b50600160a060020a0381358116916020810135909116906040810135906060013561097e565b34801561038a57600080fd5b506101b76109fd565b34801561039f57600080fd5b50610190610a0c565b3480156103b457600080fd5b5061011d600480360360608110156103cb57600080fd5b50600160a060020a03813581169160208101359091169060400135610a12565b3480156103f757600080fd5b506101b76004803603602081101561040e57600080fd5b5035600160a060020a03166111d1565b600554600454600254010142116104a5576040805160e560020a62461bcd02815260206004820152602560248201527f45706f636820616e642077616974696e6720706572696f64206d75737420626560448201527f206f766572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600854600160a060020a03161561061d57600854600160a060020a039081166000908152600a602052604081205490911615156104ed57600854600160a060020a031661050c565b600854600160a060020a039081166000908152600a6020526040902054165b600654600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a038086166004830152602482019390935290519394509116916340c10f19916044808201926020929091908290030181600087803b15801561058157600080fd5b505af1158015610595573d6000803e3d6000fd5b505050506040513d60208110156105ab57600080fd5b5051156105fe5760085460015460408051600160a060020a039093168352602083019190915280517f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a42739281900390910190a15b506008805473ffffffffffffffffffffffffffffffffffffffff191690555b600454600454600254420381151561063157fe5b60028054929091049290920201905560001943810140600355600955565b600054600160a060020a0316331461069f576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005474010000000000000000000000000000000000000000900460ff1681565b60025481565b600654600160a060020a031681565b60005474010000000000000000000000000000000000000000900460ff1615156107885760068054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff199091161790556000805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b50565b336000908152600a60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015481565b600054600160a060020a0316331461081d576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600155565b60055481565b60095481565b600054600160a060020a0316331461087e576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600455565b60045481565b600054600160a060020a031633146108d9576040805160e560020a62461bcd02815260206004820152601160248201526000805160206111ed833981519152604482015290519081900360640190fd5b600454600282021061095b576040805160e560020a62461bcd02815260206004820152602c60248201527f57616974696e6720706572696f64206d757374206265206174206d6f7374206860448201527f616c66206f662065706f63680000000000000000000000000000000000000000606482015290519081900360840190fd5b600555565b600754600160a060020a031681565b600054600160a060020a031681565b60408051600160a060020a038681166c0100000000000000000000000090810260208085019190915291871602603483015260488201859052606880830185905283518084039091018152608890920190925280519101206003546000919081106109ed5760035481036109f3565b80600354035b9695505050505050565b600854600160a060020a031681565b60035481565b6000829050600760009054906101000a9004600160a060020a0316600160a060020a031663c18e467982600160a060020a0316636732e9666040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d6020811015610aa157600080fd5b50516040805160e060020a63ffffffff8516028152600160a060020a039092166004830152516024808301926020929190829003018186803b158015610ae657600080fd5b505afa158015610afa573d6000803e3d6000fd5b505050506040513d6020811015610b1057600080fd5b50511515610b68576040805160e560020a62461bcd02815260206004820152601f60248201527f417373657373656420636f6e6365707420646f6573206e6f7420657869737400604482015290519081900360640190fd5b80600160a060020a0316636732e9666040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610ba457600080fd5b505afa158015610bb8573d6000803e3d6000fd5b505050506040513d6020811015610bce57600080fd5b5051604080517f21d39c2c000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152915191909216916321d39c2c916024808301926020929190829003018186803b158015610c3357600080fd5b505afa158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b50511515610cb5576040805160e560020a62461bcd02815260206004820152601960248201527f4173736573736d656e7420646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b6004546002540181600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610cf857600080fd5b505afa158015610d0c573d6000803e3d6000fd5b505050506040513d6020811015610d2257600080fd5b505110610d9f576040805160e560020a62461bcd02815260206004820152602760248201527f4173736573736d656e74206d75737420656e64206265666f726520656e64206f60448201527f662065706f636800000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60025481600160a060020a0316633197cbb66040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610dde57600080fd5b505afa158015610df2573d6000803e3d6000fd5b505050506040513d6020811015610e0857600080fd5b505111610e85576040805160e560020a62461bcd02815260206004820152602560248201527f4173736573736d656e74206d7573742062652066726f6d2063757272656e742060448201527f65706f6368000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80600160a060020a0316639c6a1dfb6040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610ec157600080fd5b505afa158015610ed5573d6000803e3d6000fd5b505050506040513d6020811015610eeb57600080fd5b50516006811115610ef857fe5b600414610f4f576040805160e560020a62461bcd02815260206004820152601c60248201527f4173736573736d656e74206d75737420626520636f6d706c6574656400000000604482015290519081900360640190fd5b80600160a060020a031663d8273f3c856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a0316815260200191505060206040518083038186803b158015610fa857600080fd5b505afa158015610fbc573d6000803e3d6000fd5b505050506040513d6020811015610fd257600080fd5b50516006811115610fdf57fe5b60041461105c576040805160e560020a62461bcd02815260206004820152602860248201527f4173736573736f72206973206e6f742070617274206f66206d616a6f7269747960448201527f20636c7573746572000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b80600160a060020a03166313faede66040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d60208110156110c257600080fd5b505182111561111b576040805160e560020a62461bcd02815260206004820152601560248201527f73616c74206d757374206265203c3d207374616b650000000000000000000000604482015290519081900360640190fd5b600061119085858585600160a060020a031663bfa0b1336040518163ffffffff1660e060020a02815260040160206040518083038186803b15801561115f57600080fd5b505afa158015611173573d6000803e3d6000fd5b505050506040513d602081101561118957600080fd5b505161097e565b90506009548110156111ca5760098190556008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0387161790555b5050505050565b600a60205260009081526040902054600160a060020a03168156fe4f776e657220616363657373206f6e6c79000000000000000000000000000000a165627a7a72305820d148d62d91c3f3e2a2659567abb8b2b2a02505ae462819bd922ce6b60d083dd20029",
  "sourceMap": "540:5258:11:-;;;-1:-1:-1;;1007:40:11;;1492:478;8:9:-1;5:2;;;30:1;27;20:12;5:2;1492:478:11;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;1492:478:11;;;;;;;;;;;;;;;1601:15;:51;;-1:-1:-1;;;;;;1601:51:11;-1:-1:-1;;;;;1601:51:11;;;;;1662:11;:26;;;1711:3;1698:10;:16;;;1492:478;;;;1732:18;;-1:-1:-1;;1724:90:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1824:13;:30;;;;-1:-1:-1;;1891:12:11;:16;1881:27;1864:9;:45;1906:1;1919:16;-1:-1:-1;;;1945:18:11;;-1:-1:-1;;;;;;1945:18:11;1953:10;1945:18;;;540:5258;;;;;;",
  "deployedSourceMap": "540:5258:11:-;;;;;;;;;-1:-1:-1;;;540:5258:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4343:668;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4343:668:11;;;;;;5304:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5304:84:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5304:84:11;-1:-1:-1;;;;;5304:84:11;;;589:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;589:23:11;;;;;;;;;;;;;;;;;;;;;;693:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;693:22:11;;;;;;;;;;;;;;;;;;;;861:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;861:30:11;;;;;;;;-1:-1:-1;;;;;861:30:11;;;;;;;;;;;;;;2030:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2030:173:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2030:173:11;-1:-1:-1;;;;;2030:173:11;;;5210:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5210:88:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5210:88:11;-1:-1:-1;;;;;5210:88:11;;;668:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;668:18:11;;;;5394:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5394:85:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5394:85:11;;;829:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;829:25:11;;;;1007:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1007:40:11;;;;5485:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5485:96:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5485:96:11;;;800:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;800:23:11;;;;5587:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5587:209:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5587:209:11;;;898:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;898:38:11;;;;562:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;562:20:11;;;;3840:384;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3840:384:11;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;3840:384:11;;;;;;;;;;;;;;;;;;;;;;;943:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;943:21:11;;;;772;;8:9:-1;5:2;;;30:1;27;20:12;5:2;772:21:11;;;;2473:1091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2473:1091:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2473:1091:11;;;;;;;;;;;;;;;;;;1113:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1113:44:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1113:44:11;-1:-1:-1;;;;;1113:44:11;;;4343:668;4422:13;;4408:11;;4395:10;;:24;:40;4388:3;:48;4380:98;;;;;-1:-1:-1;;;;;4380:98:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:6;;-1:-1:-1;;;;;4492:6:11;:20;4488:286;;4559:6;;-1:-1:-1;;;;;4559:6:11;;;4528:19;4550:16;;;:8;:16;;;;;;4528:19;;4550:16;:30;;:58;;4602:6;;-1:-1:-1;;;;;4602:6:11;4550:58;;;4592:6;;-1:-1:-1;;;;;4592:6:11;;;4583:16;;;;:8;:16;;;;;;;4550:58;4626:11;;;4656:6;4626:37;;;;;;-1:-1:-1;;;;;4626:37:11;;;;;;;;;;;;;;;;4528:80;;-1:-1:-1;4626:11:11;;;:16;;:37;;;;;;;;;;;;;;;:11;;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;4626:37:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4626:37:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4626:37:11;4622:109;;;4701:6;;;4709;4688:28;;;-1:-1:-1;;;;;4701:6:11;;;4688:28;;;;;;;;;;;;;;;;;;;;;4622:109;-1:-1:-1;4744:6:11;:19;;-1:-1:-1;;4744:19:11;;;4488:286;4902:11;;4887;;4873:10;;4867:3;:16;4866:32;;;;;;;4852:10;;;4866:32;;;;4865:48;;;;4852:61;4839:74;;-1:-1:-1;;4950:12:11;:16;;4940:27;4923:9;:45;4978:15;:26;4343:668::o;5304:84::-;1217:5;;-1:-1:-1;;;;;1217:5:11;1203:10;:19;1195:49;;;;;-1:-1:-1;;;;;1195:49:11;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1195:49:11;;;;;;;;;;;;;;;5367:5;:14;;-1:-1:-1;;5367:14:11;-1:-1:-1;;;;;5367:14:11;;;;;;;;;;5304:84::o;589:23::-;;;;;;;;;:::o;693:22::-;;;;:::o;861:30::-;;;-1:-1:-1;;;;;861:30:11;;:::o;2030:173::-;2088:11;;;;;;;2087:12;2083:114;;;2115:11;:39;;-1:-1:-1;;;;;2115:39:11;;-1:-1:-1;;2115:39:11;;;;;;:11;2168:18;;-1:-1:-1;;2168:18:11;;;;;2083:114;2030:173;:::o;5210:88::-;5272:10;5263:20;;;;:8;:20;;;;;:28;;-1:-1:-1;;5263:28:11;-1:-1:-1;;;;;5263:28:11;;;;;;;;;;5210:88::o;668:18::-;;;;:::o;5394:85::-;1217:5;;-1:-1:-1;;;;;1217:5:11;1203:10;:19;1195:49;;;;;-1:-1:-1;;;;;1195:49:11;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1195:49:11;;;;;;;;;;;;;;;5456:6;:16;5394:85::o;829:25::-;;;;:::o;1007:40::-;;;;:::o;5485:96::-;1217:5;;-1:-1:-1;;;;;1217:5:11;1203:10;:19;1195:49;;;;;-1:-1:-1;;;;;1195:49:11;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1195:49:11;;;;;;;;;;;;;;;5553:11;:21;5485:96::o;800:23::-;;;;:::o;5587:209::-;1217:5;;-1:-1:-1;;;;;1217:5:11;1203:10;:19;1195:49;;;;;-1:-1:-1;;;;;1195:49:11;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1195:49:11;;;;;;;;;;;;;;;5691:11;;5670:1;:18;;:32;5662:89;;;;;-1:-1:-1;;;;;5662:89:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5759:13;:30;5587:209::o;898:38::-;;;-1:-1:-1;;;;;898:38:11;;:::o;562:20::-;;;-1:-1:-1;;;;;562:20:11;;:::o;3840:384::-;4071:69;;;-1:-1:-1;;;;;4071:69:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;4071:69:11;;;;;;;4061:80;;;;;4163:9;;-1:-1:-1;;4061:80:11;-1:-1:-1;;4163:54:11;;4208:9;;4201:4;:16;4163:54;;;4194:4;4182:9;;:16;4163:54;4152:65;3840:384;-1:-1:-1;;;;;;3840:384:11:o;943:21::-;;;-1:-1:-1;;;;;943:21:11;;:::o;772:::-;;;;:::o;2473:1091::-;2570:21;2605:11;2570:47;;2636:15;;;;;;;;;-1:-1:-1;;;;;2636:15:11;-1:-1:-1;;;;;2636:29:11;;2674:10;-1:-1:-1;;;;;2674:18:11;;:20;;;;;-1:-1:-1;;;2674:20:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2674:20:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2674:20:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2674:20:11;2636:60;;;-1:-1:-1;;;2636:60:11;;;;;;-1:-1:-1;;;;;2636:60:11;;;;;;;;;;;;;2674:20;;2636:60;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;2636:60:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2636:60:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2636:60:11;2628:104;;;;;;;-1:-1:-1;;;;;2628:104:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2758:10;-1:-1:-1;;;;;2758:18:11;;:20;;;;;-1:-1:-1;;;2758:20:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2758:20:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2758:20:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2758:20:11;2750:59;;;;;;-1:-1:-1;;;;;2750:59:11;;;;;;;;;:46;;;;;;;:59;;;;;2758:20;;2750:59;;;;;;;:46;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;2750:59:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2750:59:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2750:59:11;2742:97;;;;;;;-1:-1:-1;;;;;2742:97:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:11;;2880:10;;:24;2857:10;-1:-1:-1;;;;;2857:18:11;;:20;;;;;-1:-1:-1;;;2857:20:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2857:20:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2857:20:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2857:20:11;:47;2849:99;;;;;-1:-1:-1;;;;;2849:99:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2989:10;;2966;-1:-1:-1;;;;;2966:18:11;;:20;;;;;-1:-1:-1;;;2966:20:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2966:20:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2966:20:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2966:20:11;:33;2958:83;;;;;-1:-1:-1;;;;;2958:83:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3064:10;-1:-1:-1;;;;;3064:26:11;;:28;;;;;-1:-1:-1;;;3064:28:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3064:28:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3064:28:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3064:28:11;3059:34;;;;;;;;3097:1;3059:39;3051:80;;;;;-1:-1:-1;;;;;3051:80:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;3173:10;-1:-1:-1;;;;;3173:24:11;;3198:9;3173:35;;;;;-1:-1:-1;;;3173:35:11;;;;;;;-1:-1:-1;;;;;3173:35:11;-1:-1:-1;;;;;3173:35:11;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3173:35:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3173:35:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3173:35:11;3168:41;;;;;;;;3213:1;3168:46;3160:99;;;;;-1:-1:-1;;;;;3160:99:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3291:10;-1:-1:-1;;;;;3291:15:11;;:17;;;;;-1:-1:-1;;;3291:17:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3291:17:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3291:17:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3291:17:11;3277:31;;;3269:65;;;;;-1:-1:-1;;;;;3269:65:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:13;3361:72;3379:9;3390:11;3403:10;3415;-1:-1:-1;;;;;3415:15:11;;:17;;;;;-1:-1:-1;;;3415:17:11;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3415:17:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3415:17:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3415:17:11;3361;:72::i;:::-;3345:88;;3458:15;;3447:8;:26;3443:115;;;3489:15;:26;;;3529:6;:18;;-1:-1:-1;;3529:18:11;-1:-1:-1;;;;;3529:18:11;;;;;3443:115;2473:1091;;;;;:::o;1113:44::-;;;;;;;;;;;;-1:-1:-1;;;;;1113:44:11;;:::o",
  "source": "pragma solidity ^0.5.0;\n\nimport \"./ConceptRegistry.sol\";\nimport \"./Assessment.sol\";\nimport \"./FathomToken.sol\";\n\n// NOTE\n// For a detailed explanation of the minting mechanism, see\n// https://fathom.network/blog/archive/distributing-tokens/\n\n/**\n   @notice Contract to manage the minting of new network tokens. New Tokens are\n   minted once per a user-defined timeperiod (epoch) and are distributed in a\n   lottery. Tickets can be submitted for assessors who have completed\n   assessments as part of the majority, in the current epoch.\n */\ncontract Minter {\n    address public owner;\n\n    bool public initialized;\n\n    // amount of new tokens generated each epoch\n    uint public reward;\n\n    uint public epochStart;\n\n    // target hash for tickets to compare against\n    uint public epochHash;\n\n    uint public epochLength;\n    uint public waitingPeriod;\n\n    FathomToken public fathomToken;\n\n    ConceptRegistry public conceptRegistry;\n\n    address public winner;\n\n    // current best ticket distance\n    uint public closestDistance = 2**256 - 1;\n\n    // participant => address that should receive winnings\n    mapping (address => address) public coinbase;\n\n    modifier onlyOwner() {\n        require(msg.sender == owner, \"Owner access only\");\n        _;\n    }\n\n    event NewOwner(address oldOwner, address newOwner);\n    event NewReward(uint oldReward, uint newReward);\n    event NewEpochLength(uint oldLength, uint newLength);\n    event TokensMinted(address recipient, uint amount);\n\n    constructor(address _conceptRegistry, uint _epochLength, uint _waitingPeriod, uint _reward) public {\n        conceptRegistry = ConceptRegistry(_conceptRegistry);\n        epochLength = _epochLength;\n        epochStart = now;\n        require(2 * _waitingPeriod < _epochLength, 'waiting period must be at most half of epoch');\n        waitingPeriod = _waitingPeriod;\n        epochHash = uint(blockhash(block.number - 1));\n        reward = _reward;\n        owner = msg.sender;\n    }\n\n    /// @dev will be called during network deployment\n    function init(address _fathomToken) public {\n        if (!initialized) {\n            fathomToken = FathomToken(_fathomToken);\n            initialized = true;\n        }\n    }\n\n    /*\n      @notice Called to submit tickets for assessors who have completed an assessment as part of the majority in the\n      current epoch\n      @param _tokenSalt A number smaller or equal to the amount of tokens the assessor staked in the assessment\n\n    */\n    function submitTicket (address _assessor, address _assessment, uint _tokenSalt) public {\n        Assessment assessment = Assessment(_assessment);\n\n        require(conceptRegistry.conceptExists(address(assessment.concept())), 'Assessed concept does not exist');\n        require(Concept(assessment.concept()).assessmentExists(_assessment), 'Assessment does not exist');\n        require(assessment.endTime() < epochStart + epochLength, 'Assessment must end before end of epoch');\n        require(assessment.endTime() > epochStart, 'Assessment must be from current epoch');\n        require(uint(assessment.assessmentStage()) == 4, 'Assessment must be completed'); // 4 -> Stage.Done\n        require(uint(assessment.assessorStage(_assessor)) == 4, 'Assessor is not part of majority cluster');\n        require(_tokenSalt <= assessment.cost(), 'salt must be <= stake');\n\n        uint distance = getTicketDistance(_assessor, _assessment, _tokenSalt, assessment.salt());\n        if (distance < closestDistance) {\n            closestDistance = distance;\n            winner = _assessor;\n        }\n    }\n\n    /// @param _tokenSalt A number smaller than the amount of tokens staked by the assessor\n    /// @param _assessmentSalt Taken from assessment, generated by XOR-ing the salts of all revealing assessors\n    /// @return the distance to the target hash of a given ticket\n    function getTicketDistance(\n        address _assessor,\n        address _assessment,\n        uint _tokenSalt,\n        bytes32 _assessmentSalt\n    )\n        public view returns(uint distance)\n    {\n        uint hash = uint(keccak256(abi.encodePacked(_assessor, _assessment, _tokenSalt, _assessmentSalt)));\n        distance = epochHash > hash ? epochHash - hash : hash - epochHash;\n    }\n\n    /// @notice Called by anyone to end the current epoch, start the next one and trigger a payout to the winner\n    function endEpoch() public {\n        require(now > (epochStart + epochLength + waitingPeriod), 'Epoch and waiting period must be over');\n        if (winner != address(0)) {\n            address mintAddress = coinbase[winner] != address(0) ? coinbase[winner] : winner;\n            if (fathomToken.mint(mintAddress, reward)) {\n                emit TokensMinted(winner, reward);\n            }\n            winner = address(0);\n        }\n        // increase epochStart until the current moment\n        epochStart = epochStart + ((now - epochStart) / epochLength) * epochLength;\n        epochHash = uint(blockhash(block.number - 1));\n        closestDistance = 2**256-1;\n    }\n\n    // ********************************************\n    // SETTER FUNCTIONS\n    // ********************************************\n    /// @notice Called by participants to redirect their rewards\n    function setCoinbase(address _user) public {\n        coinbase[msg.sender] = _user;\n    }\n\n    function setOwner(address _owner) public onlyOwner() {\n        owner = _owner;\n    }\n\n    function setReward(uint _reward) public onlyOwner() {\n        reward = _reward;\n    }\n\n    function setEpochLength (uint _length) public onlyOwner() {\n        epochLength = _length;\n    }\n\n    function setWaitingPeriod (uint _waitingPeriod) public onlyOwner() {\n      require(2 * _waitingPeriod < epochLength, 'Waiting period must be at most half of epoch');\n      waitingPeriod = _waitingPeriod;\n    }\n}\n",
  "sourcePath": "/builds/fathom/assess/contracts/contracts/Minter.sol",
  "ast": {
    "absolutePath": "/builds/fathom/assess/contracts/contracts/Minter.sol",
    "exportedSymbols": {
      "Minter": [
        3809
      ]
    },
    "id": 3810,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3343,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/ConceptRegistry.sol",
        "file": "./ConceptRegistry.sol",
        "id": 3344,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 2683,
        "src": "25:31:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/Assessment.sol",
        "file": "./Assessment.sol",
        "id": 3345,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 1296,
        "src": "57:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/FathomToken.sol",
        "file": "./FathomToken.sol",
        "id": 3346,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 3063,
        "src": "84:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@notice Contract to manage the minting of new network tokens. New Tokens are\nminted once per a user-defined timeperiod (epoch) and are distributed in a\nlottery. Tickets can be submitted for assessors who have completed\nassessments as part of the majority, in the current epoch.",
        "fullyImplemented": true,
        "id": 3809,
        "linearizedBaseContracts": [
          3809
        ],
        "name": "Minter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 3348,
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "562:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3347,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "562:7:11",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3350,
            "name": "initialized",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "589:23:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 3349,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "589:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3352,
            "name": "reward",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "668:18:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3351,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "668:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3354,
            "name": "epochStart",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "693:22:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3353,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "693:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3356,
            "name": "epochHash",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "772:21:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3355,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "772:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3358,
            "name": "epochLength",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "800:23:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3357,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "800:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3360,
            "name": "waitingPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "829:25:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3359,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "829:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3362,
            "name": "fathomToken",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "861:30:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_FathomToken_$3062",
              "typeString": "contract FathomToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 3361,
              "name": "FathomToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3062,
              "src": "861:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FathomToken_$3062",
                "typeString": "contract FathomToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3364,
            "name": "conceptRegistry",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "898:38:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
              "typeString": "contract ConceptRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 3363,
              "name": "ConceptRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2682,
              "src": "898:15:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                "typeString": "contract ConceptRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3366,
            "name": "winner",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "943:21:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3365,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "943:7:11",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3373,
            "name": "closestDistance",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "1007:40:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3367,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1007:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              },
              "id": 3372,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "commonType": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                },
                "id": 3370,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 3368,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1037:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "argumentTypes": null,
                  "hexValue": "323536",
                  "id": 3369,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1040:3:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_256_by_1",
                    "typeString": "int_const 256"
                  },
                  "value": "256"
                },
                "src": "1037:6:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "-",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "31",
                "id": 3371,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1046:1:11",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "src": "1037:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3377,
            "name": "coinbase",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "1113:44:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 3376,
              "keyType": {
                "id": 3374,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1122:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1113:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 3375,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1133:7:11",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3388,
              "nodeType": "Block",
              "src": "1185:77:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3380,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5967,
                            "src": "1203:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1203:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3382,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3348,
                          "src": "1217:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1203:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f776e657220616363657373206f6e6c79",
                        "id": 3384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1224:19:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cbb7cbf9a2b22f5a3e435e50b81af3232ae86a517b686cbee2d424fa6ae6bcc9",
                          "typeString": "literal_string \"Owner access only\""
                        },
                        "value": "Owner access only"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cbb7cbf9a2b22f5a3e435e50b81af3232ae86a517b686cbee2d424fa6ae6bcc9",
                          "typeString": "literal_string \"Owner access only\""
                        }
                      ],
                      "id": 3379,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "1195:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1195:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3386,
                  "nodeType": "ExpressionStatement",
                  "src": "1195:49:11"
                },
                {
                  "id": 3387,
                  "nodeType": "PlaceholderStatement",
                  "src": "1254:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3389,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1182:2:11"
            },
            "src": "1164:98:11",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3395,
            "name": "NewOwner",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3391,
                  "indexed": false,
                  "name": "oldOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3395,
                  "src": "1283:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3390,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1283:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3393,
                  "indexed": false,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3395,
                  "src": "1301:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1282:36:11"
            },
            "src": "1268:51:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3401,
            "name": "NewReward",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3397,
                  "indexed": false,
                  "name": "oldReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3401,
                  "src": "1340:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3396,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1340:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3399,
                  "indexed": false,
                  "name": "newReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3401,
                  "src": "1356:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3398,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1356:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1339:32:11"
            },
            "src": "1324:48:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3407,
            "name": "NewEpochLength",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3403,
                  "indexed": false,
                  "name": "oldLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3407,
                  "src": "1398:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3402,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1398:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3405,
                  "indexed": false,
                  "name": "newLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3407,
                  "src": "1414:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3404,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1414:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1397:32:11"
            },
            "src": "1377:53:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3413,
            "name": "TokensMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3409,
                  "indexed": false,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 3413,
                  "src": "1454:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1454:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3411,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3413,
                  "src": "1473:11:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3410,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1473:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1453:32:11"
            },
            "src": "1435:51:11"
          },
          {
            "body": {
              "id": 3471,
              "nodeType": "Block",
              "src": "1591:379:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3424,
                      "name": "conceptRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3364,
                      "src": "1601:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                        "typeString": "contract ConceptRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3426,
                          "name": "_conceptRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3415,
                          "src": "1635:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3425,
                        "name": "ConceptRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2682,
                        "src": "1619:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ConceptRegistry_$2682_$",
                          "typeString": "type(contract ConceptRegistry)"
                        }
                      },
                      "id": 3427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1619:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                        "typeString": "contract ConceptRegistry"
                      }
                    },
                    "src": "1601:51:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                      "typeString": "contract ConceptRegistry"
                    }
                  },
                  "id": 3429,
                  "nodeType": "ExpressionStatement",
                  "src": "1601:51:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3430,
                      "name": "epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3358,
                      "src": "1662:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3431,
                      "name": "_epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3417,
                      "src": "1676:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1662:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3433,
                  "nodeType": "ExpressionStatement",
                  "src": "1662:26:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3434,
                      "name": "epochStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3354,
                      "src": "1698:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3435,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5969,
                      "src": "1711:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1698:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3437,
                  "nodeType": "ExpressionStatement",
                  "src": "1698:16:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 3439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1732:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3440,
                            "name": "_waitingPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3419,
                            "src": "1736:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1732:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3442,
                          "name": "_epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3417,
                          "src": "1753:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1732:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "77616974696e6720706572696f64206d757374206265206174206d6f73742068616c66206f662065706f6368",
                        "id": 3444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1767:46:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5b4ee03b27903687cff9821d83c2a016f6e99f593fc475ee4102172859cf2640",
                          "typeString": "literal_string \"waiting period must be at most half of epoch\""
                        },
                        "value": "waiting period must be at most half of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5b4ee03b27903687cff9821d83c2a016f6e99f593fc475ee4102172859cf2640",
                          "typeString": "literal_string \"waiting period must be at most half of epoch\""
                        }
                      ],
                      "id": 3438,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "1724:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1724:90:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3446,
                  "nodeType": "ExpressionStatement",
                  "src": "1724:90:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3447,
                      "name": "waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3360,
                      "src": "1824:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3448,
                      "name": "_waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3419,
                      "src": "1840:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1824:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3450,
                  "nodeType": "ExpressionStatement",
                  "src": "1824:30:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3451,
                      "name": "epochHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3356,
                      "src": "1864:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3457,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3454,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5957,
                                  "src": "1891:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1891:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3456,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1906:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1891:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3453,
                            "name": "blockhash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5958,
                            "src": "1881:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 3458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1881:27:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1876:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 3459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1876:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1864:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3461,
                  "nodeType": "ExpressionStatement",
                  "src": "1864:45:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3462,
                      "name": "reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3352,
                      "src": "1919:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3463,
                      "name": "_reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3421,
                      "src": "1928:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1919:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3465,
                  "nodeType": "ExpressionStatement",
                  "src": "1919:16:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3466,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3348,
                      "src": "1945:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3467,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5967,
                        "src": "1953:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1953:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1945:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3470,
                  "nodeType": "ExpressionStatement",
                  "src": "1945:18:11"
                }
              ]
            },
            "documentation": null,
            "id": 3472,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3415,
                  "name": "_conceptRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1504:24:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3417,
                  "name": "_epochLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1530:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3416,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1530:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3419,
                  "name": "_waitingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1549:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3418,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1549:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3421,
                  "name": "_reward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1570:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3420,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1570:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1503:80:11"
            },
            "returnParameters": {
              "id": 3423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1591:0:11"
            },
            "scope": 3809,
            "src": "1492:478:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3491,
              "nodeType": "Block",
              "src": "2073:130:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 3478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2087:12:11",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 3477,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3350,
                      "src": "2088:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3490,
                  "nodeType": "IfStatement",
                  "src": "2083:114:11",
                  "trueBody": {
                    "id": 3489,
                    "nodeType": "Block",
                    "src": "2101:96:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3479,
                            "name": "fathomToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3362,
                            "src": "2115:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FathomToken_$3062",
                              "typeString": "contract FathomToken"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3481,
                                "name": "_fathomToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3474,
                                "src": "2141:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3480,
                              "name": "FathomToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3062,
                              "src": "2129:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FathomToken_$3062_$",
                                "typeString": "type(contract FathomToken)"
                              }
                            },
                            "id": 3482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2129:25:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FathomToken_$3062",
                              "typeString": "contract FathomToken"
                            }
                          },
                          "src": "2115:39:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FathomToken_$3062",
                            "typeString": "contract FathomToken"
                          }
                        },
                        "id": 3484,
                        "nodeType": "ExpressionStatement",
                        "src": "2115:39:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3485,
                            "name": "initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3350,
                            "src": "2168:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 3486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2182:4:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2168:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3488,
                        "nodeType": "ExpressionStatement",
                        "src": "2168:18:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev will be called during network deployment",
            "id": 3492,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "init",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3474,
                  "name": "_fathomToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 3492,
                  "src": "2044:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3473,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2044:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2043:22:11"
            },
            "returnParameters": {
              "id": 3476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2073:0:11"
            },
            "scope": 3809,
            "src": "2030:173:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3607,
              "nodeType": "Block",
              "src": "2560:1004:11",
              "statements": [
                {
                  "assignments": [
                    3502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3502,
                      "name": "assessment",
                      "nodeType": "VariableDeclaration",
                      "scope": 3607,
                      "src": "2570:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Assessment_$1295",
                        "typeString": "contract Assessment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3501,
                        "name": "Assessment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1295,
                        "src": "2570:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Assessment_$1295",
                          "typeString": "contract Assessment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3506,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3504,
                        "name": "_assessment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3496,
                        "src": "2605:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3503,
                      "name": "Assessment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1295,
                      "src": "2594:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Assessment_$1295_$",
                        "typeString": "type(contract Assessment)"
                      }
                    },
                    "id": 3505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2594:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Assessment_$1295",
                      "typeString": "contract Assessment"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2570:47:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3511,
                                    "name": "assessment",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3502,
                                    "src": "2674:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Assessment_$1295",
                                      "typeString": "contract Assessment"
                                    }
                                  },
                                  "id": 3512,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "concept",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1334,
                                  "src": "2674:18:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Concept_$2247_$",
                                    "typeString": "function () view external returns (contract Concept)"
                                  }
                                },
                                "id": 3513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2674:20:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              ],
                              "id": 3510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2666:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2666:29:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3508,
                            "name": "conceptRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3364,
                            "src": "2636:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                              "typeString": "contract ConceptRegistry"
                            }
                          },
                          "id": 3509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "conceptExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2537,
                          "src": "2636:29:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 3515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2636:60:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "417373657373656420636f6e6365707420646f6573206e6f74206578697374",
                        "id": 3516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2698:33:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7261ae3eabf7aa2564e7fb9a4e663eab181198f052fcd188b370584025ed30dd",
                          "typeString": "literal_string \"Assessed concept does not exist\""
                        },
                        "value": "Assessed concept does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7261ae3eabf7aa2564e7fb9a4e663eab181198f052fcd188b370584025ed30dd",
                          "typeString": "literal_string \"Assessed concept does not exist\""
                        }
                      ],
                      "id": 3507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2628:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2628:104:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3518,
                  "nodeType": "ExpressionStatement",
                  "src": "2628:104:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3526,
                            "name": "_assessment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3496,
                            "src": "2797:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3521,
                                    "name": "assessment",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3502,
                                    "src": "2758:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Assessment_$1295",
                                      "typeString": "contract Assessment"
                                    }
                                  },
                                  "id": 3522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "concept",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1334,
                                  "src": "2758:18:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Concept_$2247_$",
                                    "typeString": "function () view external returns (contract Concept)"
                                  }
                                },
                                "id": 3523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2758:20:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              ],
                              "id": 3520,
                              "name": "Concept",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2247,
                              "src": "2750:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Concept_$2247_$",
                                "typeString": "type(contract Concept)"
                              }
                            },
                            "id": 3524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2750:29:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Concept_$2247",
                              "typeString": "contract Concept"
                            }
                          },
                          "id": 3525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "assessmentExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2289,
                          "src": "2750:46:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 3527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2750:59:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e7420646f6573206e6f74206578697374",
                        "id": 3528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2811:27:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_015a2dd6c53ed5c1fa2245036980e5bad47c1f8e33effb2fdafe51b7d0ddc985",
                          "typeString": "literal_string \"Assessment does not exist\""
                        },
                        "value": "Assessment does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_015a2dd6c53ed5c1fa2245036980e5bad47c1f8e33effb2fdafe51b7d0ddc985",
                          "typeString": "literal_string \"Assessment does not exist\""
                        }
                      ],
                      "id": 3519,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2742:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:97:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3530,
                  "nodeType": "ExpressionStatement",
                  "src": "2742:97:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3532,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "2857:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "endTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1342,
                            "src": "2857:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2857:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3535,
                            "name": "epochStart",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3354,
                            "src": "2880:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3536,
                            "name": "epochLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3358,
                            "src": "2893:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2880:24:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2857:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d75737420656e64206265666f726520656e64206f662065706f6368",
                        "id": 3539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2906:41:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e995d6fa0db310670f0d23ff8a9a44bfaef78904289a1eb3b7210f1df5855df",
                          "typeString": "literal_string \"Assessment must end before end of epoch\""
                        },
                        "value": "Assessment must end before end of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e995d6fa0db310670f0d23ff8a9a44bfaef78904289a1eb3b7210f1df5855df",
                          "typeString": "literal_string \"Assessment must end before end of epoch\""
                        }
                      ],
                      "id": 3531,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2849:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2849:99:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3541,
                  "nodeType": "ExpressionStatement",
                  "src": "2849:99:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3543,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "2966:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "endTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1342,
                            "src": "2966:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2966:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3546,
                          "name": "epochStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3354,
                          "src": "2989:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2966:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d7573742062652066726f6d2063757272656e742065706f6368",
                        "id": 3548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3001:39:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_96d4ffb371f63e5d1396cadf9759aeaab5b6cf69d6a549eaf5b8466c2238ad48",
                          "typeString": "literal_string \"Assessment must be from current epoch\""
                        },
                        "value": "Assessment must be from current epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_96d4ffb371f63e5d1396cadf9759aeaab5b6cf69d6a549eaf5b8466c2238ad48",
                          "typeString": "literal_string \"Assessment must be from current epoch\""
                        }
                      ],
                      "id": 3542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2958:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2958:83:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3550,
                  "nodeType": "ExpressionStatement",
                  "src": "2958:83:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3553,
                                  "name": "assessment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3502,
                                  "src": "3064:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Assessment_$1295",
                                    "typeString": "contract Assessment"
                                  }
                                },
                                "id": 3554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "assessmentStage",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1370,
                                "src": "3064:26:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_enum$_Stage_$1364_$",
                                  "typeString": "function () view external returns (enum AssessmentData.Stage)"
                                }
                              },
                              "id": 3555,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3064:28:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            ],
                            "id": 3552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3059:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 3556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3059:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 3557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3097:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "src": "3059:39:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d75737420626520636f6d706c65746564",
                        "id": 3559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3100:30:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7185e2efd9cf1cbfa8432c1db0cdc716590fdbcb0c62e253c528267adf231555",
                          "typeString": "literal_string \"Assessment must be completed\""
                        },
                        "value": "Assessment must be completed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7185e2efd9cf1cbfa8432c1db0cdc716590fdbcb0c62e253c528267adf231555",
                          "typeString": "literal_string \"Assessment must be completed\""
                        }
                      ],
                      "id": 3551,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3051:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3051:80:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3561,
                  "nodeType": "ExpressionStatement",
                  "src": "3051:80:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3566,
                                  "name": "_assessor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3494,
                                  "src": "3198:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3564,
                                  "name": "assessment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3502,
                                  "src": "3173:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Assessment_$1295",
                                    "typeString": "contract Assessment"
                                  }
                                },
                                "id": 3565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "assessorStage",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1368,
                                "src": "3173:24:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_enum$_Stage_$1364_$",
                                  "typeString": "function (address) view external returns (enum AssessmentData.Stage)"
                                }
                              },
                              "id": 3567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3173:35:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            ],
                            "id": 3563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3168:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 3568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3168:41:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 3569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3213:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "src": "3168:46:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736f72206973206e6f742070617274206f66206d616a6f7269747920636c7573746572",
                        "id": 3571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3216:42:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_31f58cf301da050bb15d855d5b4eeb35d27af5ea6d0d1b03270f12615acdc4c3",
                          "typeString": "literal_string \"Assessor is not part of majority cluster\""
                        },
                        "value": "Assessor is not part of majority cluster"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_31f58cf301da050bb15d855d5b4eeb35d27af5ea6d0d1b03270f12615acdc4c3",
                          "typeString": "literal_string \"Assessor is not part of majority cluster\""
                        }
                      ],
                      "id": 3562,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3160:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3160:99:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3573,
                  "nodeType": "ExpressionStatement",
                  "src": "3160:99:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3575,
                          "name": "_tokenSalt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3498,
                          "src": "3277:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3576,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "3291:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1346,
                            "src": "3291:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3291:17:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3277:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73616c74206d757374206265203c3d207374616b65",
                        "id": 3580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3310:23:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6079c31c2d2d8f0586fb7e1deb4323422bb607356cdf8b1d123165a5680a6d1d",
                          "typeString": "literal_string \"salt must be <= stake\""
                        },
                        "value": "salt must be <= stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6079c31c2d2d8f0586fb7e1deb4323422bb607356cdf8b1d123165a5680a6d1d",
                          "typeString": "literal_string \"salt must be <= stake\""
                        }
                      ],
                      "id": 3574,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3269:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3269:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3582,
                  "nodeType": "ExpressionStatement",
                  "src": "3269:65:11"
                },
                {
                  "assignments": [
                    3584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3584,
                      "name": "distance",
                      "nodeType": "VariableDeclaration",
                      "scope": 3607,
                      "src": "3345:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3583,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3345:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3586,
                        "name": "_assessor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3494,
                        "src": "3379:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3587,
                        "name": "_assessment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3496,
                        "src": "3390:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3588,
                        "name": "_tokenSalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3498,
                        "src": "3403:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3589,
                            "name": "assessment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3502,
                            "src": "3415:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Assessment_$1295",
                              "typeString": "contract Assessment"
                            }
                          },
                          "id": 3590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "salt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1352,
                          "src": "3415:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 3591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3415:17:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3585,
                      "name": "getTicketDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3649,
                      "src": "3361:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,bytes32) view returns (uint256)"
                      }
                    },
                    "id": 3592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3361:72:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3345:88:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3594,
                      "name": "distance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3584,
                      "src": "3447:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3595,
                      "name": "closestDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3373,
                      "src": "3458:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3447:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3606,
                  "nodeType": "IfStatement",
                  "src": "3443:115:11",
                  "trueBody": {
                    "id": 3605,
                    "nodeType": "Block",
                    "src": "3475:83:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3597,
                            "name": "closestDistance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3373,
                            "src": "3489:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3598,
                            "name": "distance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3584,
                            "src": "3507:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3489:26:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3600,
                        "nodeType": "ExpressionStatement",
                        "src": "3489:26:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3601,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "3529:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3602,
                            "name": "_assessor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3494,
                            "src": "3538:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3529:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3604,
                        "nodeType": "ExpressionStatement",
                        "src": "3529:18:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 3608,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitTicket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3494,
                  "name": "_assessor",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2496:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3496,
                  "name": "_assessment",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2515:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3495,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3498,
                  "name": "_tokenSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2536:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3497,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2536:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2495:57:11"
            },
            "returnParameters": {
              "id": 3500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2560:0:11"
            },
            "scope": 3809,
            "src": "2473:1091:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3648,
              "nodeType": "Block",
              "src": "4034:190:11",
              "statements": [
                {
                  "assignments": [
                    3622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3622,
                      "name": "hash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3648,
                      "src": "4044:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3621,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4044:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3634,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3627,
                                "name": "_assessor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3610,
                                "src": "4088:9:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3628,
                                "name": "_assessment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3612,
                                "src": "4099:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3629,
                                "name": "_tokenSalt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3614,
                                "src": "4112:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3630,
                                "name": "_assessmentSalt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3616,
                                "src": "4124:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3625,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5954,
                                "src": "4071:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 3626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4071:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 3631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4071:69:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 3624,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5961,
                          "src": "4061:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 3632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4061:80:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4056:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint"
                    },
                    "id": 3633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4056:86:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4044:98:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3635,
                      "name": "distance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3619,
                      "src": "4152:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3636,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4163:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3637,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4175:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4163:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3642,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4201:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3643,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4208:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4201:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "4163:54:11",
                      "trueExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3639,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4182:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3640,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4194:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4182:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4152:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3647,
                  "nodeType": "ExpressionStatement",
                  "src": "4152:65:11"
                }
              ]
            },
            "documentation": "@param _tokenSalt A number smaller than the amount of tokens staked by the assessor\n @param _assessmentSalt Taken from assessment, generated by XOR-ing the salts of all revealing assessors\n @return the distance to the target hash of a given ticket",
            "id": 3649,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTicketDistance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3610,
                  "name": "_assessor",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3876:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3876:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3612,
                  "name": "_assessment",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3903:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3611,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3903:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3614,
                  "name": "_tokenSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3932:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3613,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3932:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3616,
                  "name": "_assessmentSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3957:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3615,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3957:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3866:120:11"
            },
            "returnParameters": {
              "id": 3620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3619,
                  "name": "distance",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "4015:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3618,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4015:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4014:15:11"
            },
            "scope": 3809,
            "src": "3840:384:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3737,
              "nodeType": "Block",
              "src": "4370:641:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3653,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5969,
                          "src": "4388:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3656,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3654,
                                  "name": "epochStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3354,
                                  "src": "4395:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3655,
                                  "name": "epochLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3358,
                                  "src": "4408:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4395:24:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3657,
                                "name": "waitingPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3360,
                                "src": "4422:13:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4395:40:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3659,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4394:42:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4388:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "45706f636820616e642077616974696e6720706572696f64206d757374206265206f766572",
                        "id": 3661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4438:39:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eaf171613008b963b14617fb16af9174b9e422538f0d88f3451a5645a788da92",
                          "typeString": "literal_string \"Epoch and waiting period must be over\""
                        },
                        "value": "Epoch and waiting period must be over"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eaf171613008b963b14617fb16af9174b9e422538f0d88f3451a5645a788da92",
                          "typeString": "literal_string \"Epoch and waiting period must be over\""
                        }
                      ],
                      "id": 3652,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "4380:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4380:98:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3663,
                  "nodeType": "ExpressionStatement",
                  "src": "4380:98:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3664,
                      "name": "winner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3366,
                      "src": "4492:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4510:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4502:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3667,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4502:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4492:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3703,
                  "nodeType": "IfStatement",
                  "src": "4488:286:11",
                  "trueBody": {
                    "id": 3702,
                    "nodeType": "Block",
                    "src": "4514:260:11",
                    "statements": [
                      {
                        "assignments": [
                          3670
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3670,
                            "name": "mintAddress",
                            "nodeType": "VariableDeclaration",
                            "scope": 3702,
                            "src": "4528:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3669,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4528:7:11",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3683,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3671,
                                "name": "coinbase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3377,
                                "src": "4550:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 3673,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3672,
                                "name": "winner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3366,
                                "src": "4559:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4550:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4578:1:11",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4570:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4570:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "4550:30:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 3681,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "4602:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "4550:58:11",
                          "trueExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3678,
                              "name": "coinbase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3377,
                              "src": "4583:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 3680,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3679,
                              "name": "winner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3366,
                              "src": "4592:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4583:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4528:80:11"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3686,
                              "name": "mintAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3670,
                              "src": "4643:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3687,
                              "name": "reward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3352,
                              "src": "4656:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3684,
                              "name": "fathomToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3362,
                              "src": "4626:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FathomToken_$3062",
                                "typeString": "contract FathomToken"
                              }
                            },
                            "id": 3685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2979,
                            "src": "4626:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 3688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4626:37:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3695,
                        "nodeType": "IfStatement",
                        "src": "4622:109:11",
                        "trueBody": {
                          "id": 3694,
                          "nodeType": "Block",
                          "src": "4665:66:11",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3690,
                                    "name": "winner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3366,
                                    "src": "4701:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3691,
                                    "name": "reward",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3352,
                                    "src": "4709:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3689,
                                  "name": "TokensMinted",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3413,
                                  "src": "4688:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 3692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4688:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3693,
                              "nodeType": "EmitStatement",
                              "src": "4683:33:11"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3696,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "4744:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 3698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4761:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 3697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4753:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4753:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4744:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3701,
                        "nodeType": "ExpressionStatement",
                        "src": "4744:19:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3704,
                      "name": "epochStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3354,
                      "src": "4839:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3705,
                        "name": "epochStart",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3354,
                        "src": "4852:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3708,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3706,
                                      "name": "now",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5969,
                                      "src": "4867:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3707,
                                      "name": "epochStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3354,
                                      "src": "4873:10:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4867:16:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 3709,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4866:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3710,
                                "name": "epochLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3358,
                                "src": "4887:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4866:32:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3712,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4865:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3713,
                          "name": "epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3358,
                          "src": "4902:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4865:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4852:61:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4839:74:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3717,
                  "nodeType": "ExpressionStatement",
                  "src": "4839:74:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3718,
                      "name": "epochHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3356,
                      "src": "4923:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3721,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5957,
                                  "src": "4950:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3722,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4950:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3723,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4965:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4950:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3720,
                            "name": "blockhash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5958,
                            "src": "4940:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 3725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4940:27:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4935:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 3726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4935:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4923:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3728,
                  "nodeType": "ExpressionStatement",
                  "src": "4923:45:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3729,
                      "name": "closestDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3373,
                      "src": "4978:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                        "typeString": "int_const 1157...(70 digits omitted)...9935"
                      },
                      "id": 3734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9936"
                        },
                        "id": 3732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 3730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4996:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "323536",
                          "id": 3731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4999:3:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_256_by_1",
                            "typeString": "int_const 256"
                          },
                          "value": "256"
                        },
                        "src": "4996:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9936"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5003:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4996:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                        "typeString": "int_const 1157...(70 digits omitted)...9935"
                      }
                    },
                    "src": "4978:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3736,
                  "nodeType": "ExpressionStatement",
                  "src": "4978:26:11"
                }
              ]
            },
            "documentation": "@notice Called by anyone to end the current epoch, start the next one and trigger a payout to the winner",
            "id": 3738,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endEpoch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3650,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4360:2:11"
            },
            "returnParameters": {
              "id": 3651,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4370:0:11"
            },
            "scope": 3809,
            "src": "4343:668:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3750,
              "nodeType": "Block",
              "src": "5253:45:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3743,
                        "name": "coinbase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3377,
                        "src": "5263:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3746,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3744,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5967,
                          "src": "5272:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5272:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5263:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3747,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3740,
                      "src": "5286:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5263:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3749,
                  "nodeType": "ExpressionStatement",
                  "src": "5263:28:11"
                }
              ]
            },
            "documentation": "@notice Called by participants to redirect their rewards",
            "id": 3751,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setCoinbase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3740,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 3751,
                  "src": "5231:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3739,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5231:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5230:15:11"
            },
            "returnParameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5253:0:11"
            },
            "scope": 3809,
            "src": "5210:88:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3762,
              "nodeType": "Block",
              "src": "5357:31:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3758,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3348,
                      "src": "5367:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3759,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3753,
                      "src": "5375:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5367:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3761,
                  "nodeType": "ExpressionStatement",
                  "src": "5367:14:11"
                }
              ]
            },
            "documentation": null,
            "id": 3763,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3756,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3755,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5345:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5345:11:11"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3753,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3763,
                  "src": "5322:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3752,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5322:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5321:16:11"
            },
            "returnParameters": {
              "id": 3757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5357:0:11"
            },
            "scope": 3809,
            "src": "5304:84:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3774,
              "nodeType": "Block",
              "src": "5446:33:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3770,
                      "name": "reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3352,
                      "src": "5456:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3771,
                      "name": "_reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3765,
                      "src": "5465:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5456:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3773,
                  "nodeType": "ExpressionStatement",
                  "src": "5456:16:11"
                }
              ]
            },
            "documentation": null,
            "id": 3775,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3768,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3767,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5434:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5434:11:11"
              }
            ],
            "name": "setReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3765,
                  "name": "_reward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3775,
                  "src": "5413:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3764,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5413:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5412:14:11"
            },
            "returnParameters": {
              "id": 3769,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5446:0:11"
            },
            "scope": 3809,
            "src": "5394:85:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3786,
              "nodeType": "Block",
              "src": "5543:38:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3782,
                      "name": "epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3358,
                      "src": "5553:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3783,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3777,
                      "src": "5567:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5553:21:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3785,
                  "nodeType": "ExpressionStatement",
                  "src": "5553:21:11"
                }
              ]
            },
            "documentation": null,
            "id": 3787,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3780,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3779,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5531:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5531:11:11"
              }
            ],
            "name": "setEpochLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3777,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "5510:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3776,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5510:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5509:14:11"
            },
            "returnParameters": {
              "id": 3781,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5543:0:11"
            },
            "scope": 3809,
            "src": "5485:96:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3807,
              "nodeType": "Block",
              "src": "5654:142:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 3795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5670:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3796,
                            "name": "_waitingPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3789,
                            "src": "5674:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5670:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3798,
                          "name": "epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3358,
                          "src": "5691:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5670:32:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "57616974696e6720706572696f64206d757374206265206174206d6f73742068616c66206f662065706f6368",
                        "id": 3800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5704:46:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_03109a7d99d679bfe6445effddd26199dabbee818f1e8c41138bd0731998e2f7",
                          "typeString": "literal_string \"Waiting period must be at most half of epoch\""
                        },
                        "value": "Waiting period must be at most half of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_03109a7d99d679bfe6445effddd26199dabbee818f1e8c41138bd0731998e2f7",
                          "typeString": "literal_string \"Waiting period must be at most half of epoch\""
                        }
                      ],
                      "id": 3794,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "5662:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5662:89:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3802,
                  "nodeType": "ExpressionStatement",
                  "src": "5662:89:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3803,
                      "name": "waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3360,
                      "src": "5759:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3804,
                      "name": "_waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3789,
                      "src": "5775:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5759:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3806,
                  "nodeType": "ExpressionStatement",
                  "src": "5759:30:11"
                }
              ]
            },
            "documentation": null,
            "id": 3808,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3791,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5642:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5642:11:11"
              }
            ],
            "name": "setWaitingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3789,
                  "name": "_waitingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 3808,
                  "src": "5614:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5614:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5613:21:11"
            },
            "returnParameters": {
              "id": 3793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5654:0:11"
            },
            "scope": 3809,
            "src": "5587:209:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 3810,
        "src": "540:5258:11"
      }
    ],
    "src": "0:5799:11"
  },
  "legacyAST": {
    "absolutePath": "/builds/fathom/assess/contracts/contracts/Minter.sol",
    "exportedSymbols": {
      "Minter": [
        3809
      ]
    },
    "id": 3810,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3343,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/ConceptRegistry.sol",
        "file": "./ConceptRegistry.sol",
        "id": 3344,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 2683,
        "src": "25:31:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/Assessment.sol",
        "file": "./Assessment.sol",
        "id": 3345,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 1296,
        "src": "57:26:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/builds/fathom/assess/contracts/contracts/FathomToken.sol",
        "file": "./FathomToken.sol",
        "id": 3346,
        "nodeType": "ImportDirective",
        "scope": 3810,
        "sourceUnit": 3063,
        "src": "84:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@notice Contract to manage the minting of new network tokens. New Tokens are\nminted once per a user-defined timeperiod (epoch) and are distributed in a\nlottery. Tickets can be submitted for assessors who have completed\nassessments as part of the majority, in the current epoch.",
        "fullyImplemented": true,
        "id": 3809,
        "linearizedBaseContracts": [
          3809
        ],
        "name": "Minter",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 3348,
            "name": "owner",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "562:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3347,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "562:7:11",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3350,
            "name": "initialized",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "589:23:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 3349,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "589:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3352,
            "name": "reward",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "668:18:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3351,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "668:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3354,
            "name": "epochStart",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "693:22:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3353,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "693:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3356,
            "name": "epochHash",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "772:21:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3355,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "772:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3358,
            "name": "epochLength",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "800:23:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3357,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "800:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3360,
            "name": "waitingPeriod",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "829:25:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3359,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "829:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3362,
            "name": "fathomToken",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "861:30:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_FathomToken_$3062",
              "typeString": "contract FathomToken"
            },
            "typeName": {
              "contractScope": null,
              "id": 3361,
              "name": "FathomToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3062,
              "src": "861:11:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_FathomToken_$3062",
                "typeString": "contract FathomToken"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3364,
            "name": "conceptRegistry",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "898:38:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
              "typeString": "contract ConceptRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 3363,
              "name": "ConceptRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2682,
              "src": "898:15:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                "typeString": "contract ConceptRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3366,
            "name": "winner",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "943:21:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3365,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "943:7:11",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3373,
            "name": "closestDistance",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "1007:40:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3367,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1007:4:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "argumentTypes": null,
              "commonType": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              },
              "id": 3372,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "argumentTypes": null,
                "commonType": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                },
                "id": 3370,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "argumentTypes": null,
                  "hexValue": "32",
                  "id": 3368,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1037:1:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "argumentTypes": null,
                  "hexValue": "323536",
                  "id": 3369,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1040:3:11",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_256_by_1",
                    "typeString": "int_const 256"
                  },
                  "value": "256"
                },
                "src": "1037:6:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                  "typeString": "int_const 1157...(70 digits omitted)...9936"
                }
              },
              "nodeType": "BinaryOperation",
              "operator": "-",
              "rightExpression": {
                "argumentTypes": null,
                "hexValue": "31",
                "id": 3371,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1046:1:11",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1_by_1",
                  "typeString": "int_const 1"
                },
                "value": "1"
              },
              "src": "1037:10:11",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                "typeString": "int_const 1157...(70 digits omitted)...9935"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3377,
            "name": "coinbase",
            "nodeType": "VariableDeclaration",
            "scope": 3809,
            "src": "1113:44:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
              "typeString": "mapping(address => address)"
            },
            "typeName": {
              "id": 3376,
              "keyType": {
                "id": 3374,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1122:7:11",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1113:28:11",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                "typeString": "mapping(address => address)"
              },
              "valueType": {
                "id": 3375,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1133:7:11",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3388,
              "nodeType": "Block",
              "src": "1185:77:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 3383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 3380,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5967,
                            "src": "1203:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 3381,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1203:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3382,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3348,
                          "src": "1217:5:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1203:19:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f776e657220616363657373206f6e6c79",
                        "id": 3384,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1224:19:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cbb7cbf9a2b22f5a3e435e50b81af3232ae86a517b686cbee2d424fa6ae6bcc9",
                          "typeString": "literal_string \"Owner access only\""
                        },
                        "value": "Owner access only"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cbb7cbf9a2b22f5a3e435e50b81af3232ae86a517b686cbee2d424fa6ae6bcc9",
                          "typeString": "literal_string \"Owner access only\""
                        }
                      ],
                      "id": 3379,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "1195:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3385,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1195:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3386,
                  "nodeType": "ExpressionStatement",
                  "src": "1195:49:11"
                },
                {
                  "id": 3387,
                  "nodeType": "PlaceholderStatement",
                  "src": "1254:1:11"
                }
              ]
            },
            "documentation": null,
            "id": 3389,
            "name": "onlyOwner",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1182:2:11"
            },
            "src": "1164:98:11",
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3395,
            "name": "NewOwner",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3391,
                  "indexed": false,
                  "name": "oldOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3395,
                  "src": "1283:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3390,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1283:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3393,
                  "indexed": false,
                  "name": "newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3395,
                  "src": "1301:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3392,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1282:36:11"
            },
            "src": "1268:51:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3401,
            "name": "NewReward",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3397,
                  "indexed": false,
                  "name": "oldReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3401,
                  "src": "1340:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3396,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1340:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3399,
                  "indexed": false,
                  "name": "newReward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3401,
                  "src": "1356:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3398,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1356:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1339:32:11"
            },
            "src": "1324:48:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3407,
            "name": "NewEpochLength",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3403,
                  "indexed": false,
                  "name": "oldLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3407,
                  "src": "1398:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3402,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1398:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3405,
                  "indexed": false,
                  "name": "newLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3407,
                  "src": "1414:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3404,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1414:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1397:32:11"
            },
            "src": "1377:53:11"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 3413,
            "name": "TokensMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3412,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3409,
                  "indexed": false,
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 3413,
                  "src": "1454:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1454:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3411,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 3413,
                  "src": "1473:11:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3410,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1473:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1453:32:11"
            },
            "src": "1435:51:11"
          },
          {
            "body": {
              "id": 3471,
              "nodeType": "Block",
              "src": "1591:379:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3424,
                      "name": "conceptRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3364,
                      "src": "1601:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                        "typeString": "contract ConceptRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 3426,
                          "name": "_conceptRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3415,
                          "src": "1635:16:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3425,
                        "name": "ConceptRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2682,
                        "src": "1619:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ConceptRegistry_$2682_$",
                          "typeString": "type(contract ConceptRegistry)"
                        }
                      },
                      "id": 3427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1619:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                        "typeString": "contract ConceptRegistry"
                      }
                    },
                    "src": "1601:51:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                      "typeString": "contract ConceptRegistry"
                    }
                  },
                  "id": 3429,
                  "nodeType": "ExpressionStatement",
                  "src": "1601:51:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3432,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3430,
                      "name": "epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3358,
                      "src": "1662:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3431,
                      "name": "_epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3417,
                      "src": "1676:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1662:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3433,
                  "nodeType": "ExpressionStatement",
                  "src": "1662:26:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3434,
                      "name": "epochStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3354,
                      "src": "1698:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3435,
                      "name": "now",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5969,
                      "src": "1711:3:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1698:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3437,
                  "nodeType": "ExpressionStatement",
                  "src": "1698:16:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3441,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 3439,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1732:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3440,
                            "name": "_waitingPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3419,
                            "src": "1736:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1732:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3442,
                          "name": "_epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3417,
                          "src": "1753:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1732:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "77616974696e6720706572696f64206d757374206265206174206d6f73742068616c66206f662065706f6368",
                        "id": 3444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1767:46:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5b4ee03b27903687cff9821d83c2a016f6e99f593fc475ee4102172859cf2640",
                          "typeString": "literal_string \"waiting period must be at most half of epoch\""
                        },
                        "value": "waiting period must be at most half of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5b4ee03b27903687cff9821d83c2a016f6e99f593fc475ee4102172859cf2640",
                          "typeString": "literal_string \"waiting period must be at most half of epoch\""
                        }
                      ],
                      "id": 3438,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "1724:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1724:90:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3446,
                  "nodeType": "ExpressionStatement",
                  "src": "1724:90:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3447,
                      "name": "waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3360,
                      "src": "1824:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3448,
                      "name": "_waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3419,
                      "src": "1840:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1824:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3450,
                  "nodeType": "ExpressionStatement",
                  "src": "1824:30:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3451,
                      "name": "epochHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3356,
                      "src": "1864:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3457,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3454,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5957,
                                  "src": "1891:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3455,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1891:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3456,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1906:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1891:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3453,
                            "name": "blockhash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5958,
                            "src": "1881:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 3458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1881:27:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1876:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 3459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1876:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1864:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3461,
                  "nodeType": "ExpressionStatement",
                  "src": "1864:45:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3464,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3462,
                      "name": "reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3352,
                      "src": "1919:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3463,
                      "name": "_reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3421,
                      "src": "1928:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1919:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3465,
                  "nodeType": "ExpressionStatement",
                  "src": "1919:16:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3466,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3348,
                      "src": "1945:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 3467,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5967,
                        "src": "1953:3:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 3468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1953:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1945:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3470,
                  "nodeType": "ExpressionStatement",
                  "src": "1945:18:11"
                }
              ]
            },
            "documentation": null,
            "id": 3472,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3415,
                  "name": "_conceptRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1504:24:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1504:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3417,
                  "name": "_epochLength",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1530:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3416,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1530:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3419,
                  "name": "_waitingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1549:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3418,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1549:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3421,
                  "name": "_reward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3472,
                  "src": "1570:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3420,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1570:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1503:80:11"
            },
            "returnParameters": {
              "id": 3423,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1591:0:11"
            },
            "scope": 3809,
            "src": "1492:478:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3491,
              "nodeType": "Block",
              "src": "2073:130:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 3478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2087:12:11",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 3477,
                      "name": "initialized",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3350,
                      "src": "2088:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3490,
                  "nodeType": "IfStatement",
                  "src": "2083:114:11",
                  "trueBody": {
                    "id": 3489,
                    "nodeType": "Block",
                    "src": "2101:96:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3479,
                            "name": "fathomToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3362,
                            "src": "2115:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FathomToken_$3062",
                              "typeString": "contract FathomToken"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3481,
                                "name": "_fathomToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3474,
                                "src": "2141:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 3480,
                              "name": "FathomToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3062,
                              "src": "2129:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_FathomToken_$3062_$",
                                "typeString": "type(contract FathomToken)"
                              }
                            },
                            "id": 3482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2129:25:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_FathomToken_$3062",
                              "typeString": "contract FathomToken"
                            }
                          },
                          "src": "2115:39:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_FathomToken_$3062",
                            "typeString": "contract FathomToken"
                          }
                        },
                        "id": 3484,
                        "nodeType": "ExpressionStatement",
                        "src": "2115:39:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3485,
                            "name": "initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3350,
                            "src": "2168:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 3486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2182:4:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2168:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3488,
                        "nodeType": "ExpressionStatement",
                        "src": "2168:18:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@dev will be called during network deployment",
            "id": 3492,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "init",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3474,
                  "name": "_fathomToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 3492,
                  "src": "2044:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3473,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2044:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2043:22:11"
            },
            "returnParameters": {
              "id": 3476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2073:0:11"
            },
            "scope": 3809,
            "src": "2030:173:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3607,
              "nodeType": "Block",
              "src": "2560:1004:11",
              "statements": [
                {
                  "assignments": [
                    3502
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3502,
                      "name": "assessment",
                      "nodeType": "VariableDeclaration",
                      "scope": 3607,
                      "src": "2570:21:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_Assessment_$1295",
                        "typeString": "contract Assessment"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 3501,
                        "name": "Assessment",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 1295,
                        "src": "2570:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_Assessment_$1295",
                          "typeString": "contract Assessment"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3506,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3504,
                        "name": "_assessment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3496,
                        "src": "2605:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 3503,
                      "name": "Assessment",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1295,
                      "src": "2594:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_Assessment_$1295_$",
                        "typeString": "type(contract Assessment)"
                      }
                    },
                    "id": 3505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2594:23:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Assessment_$1295",
                      "typeString": "contract Assessment"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2570:47:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3511,
                                    "name": "assessment",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3502,
                                    "src": "2674:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Assessment_$1295",
                                      "typeString": "contract Assessment"
                                    }
                                  },
                                  "id": 3512,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "concept",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1334,
                                  "src": "2674:18:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Concept_$2247_$",
                                    "typeString": "function () view external returns (contract Concept)"
                                  }
                                },
                                "id": 3513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2674:20:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              ],
                              "id": 3510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2666:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3514,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2666:29:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3508,
                            "name": "conceptRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3364,
                            "src": "2636:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ConceptRegistry_$2682",
                              "typeString": "contract ConceptRegistry"
                            }
                          },
                          "id": 3509,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "conceptExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2537,
                          "src": "2636:29:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 3515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2636:60:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "417373657373656420636f6e6365707420646f6573206e6f74206578697374",
                        "id": 3516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2698:33:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7261ae3eabf7aa2564e7fb9a4e663eab181198f052fcd188b370584025ed30dd",
                          "typeString": "literal_string \"Assessed concept does not exist\""
                        },
                        "value": "Assessed concept does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7261ae3eabf7aa2564e7fb9a4e663eab181198f052fcd188b370584025ed30dd",
                          "typeString": "literal_string \"Assessed concept does not exist\""
                        }
                      ],
                      "id": 3507,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2628:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2628:104:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3518,
                  "nodeType": "ExpressionStatement",
                  "src": "2628:104:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 3526,
                            "name": "_assessment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3496,
                            "src": "2797:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 3521,
                                    "name": "assessment",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3502,
                                    "src": "2758:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_Assessment_$1295",
                                      "typeString": "contract Assessment"
                                    }
                                  },
                                  "id": 3522,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "concept",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1334,
                                  "src": "2758:18:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Concept_$2247_$",
                                    "typeString": "function () view external returns (contract Concept)"
                                  }
                                },
                                "id": 3523,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2758:20:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Concept_$2247",
                                  "typeString": "contract Concept"
                                }
                              ],
                              "id": 3520,
                              "name": "Concept",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2247,
                              "src": "2750:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Concept_$2247_$",
                                "typeString": "type(contract Concept)"
                              }
                            },
                            "id": 3524,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2750:29:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Concept_$2247",
                              "typeString": "contract Concept"
                            }
                          },
                          "id": 3525,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "assessmentExists",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2289,
                          "src": "2750:46:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 3527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2750:59:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e7420646f6573206e6f74206578697374",
                        "id": 3528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2811:27:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_015a2dd6c53ed5c1fa2245036980e5bad47c1f8e33effb2fdafe51b7d0ddc985",
                          "typeString": "literal_string \"Assessment does not exist\""
                        },
                        "value": "Assessment does not exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_015a2dd6c53ed5c1fa2245036980e5bad47c1f8e33effb2fdafe51b7d0ddc985",
                          "typeString": "literal_string \"Assessment does not exist\""
                        }
                      ],
                      "id": 3519,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2742:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2742:97:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3530,
                  "nodeType": "ExpressionStatement",
                  "src": "2742:97:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3532,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "2857:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "endTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1342,
                            "src": "2857:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2857:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 3535,
                            "name": "epochStart",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3354,
                            "src": "2880:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3536,
                            "name": "epochLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3358,
                            "src": "2893:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2880:24:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2857:47:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d75737420656e64206265666f726520656e64206f662065706f6368",
                        "id": 3539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2906:41:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9e995d6fa0db310670f0d23ff8a9a44bfaef78904289a1eb3b7210f1df5855df",
                          "typeString": "literal_string \"Assessment must end before end of epoch\""
                        },
                        "value": "Assessment must end before end of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9e995d6fa0db310670f0d23ff8a9a44bfaef78904289a1eb3b7210f1df5855df",
                          "typeString": "literal_string \"Assessment must end before end of epoch\""
                        }
                      ],
                      "id": 3531,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2849:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2849:99:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3541,
                  "nodeType": "ExpressionStatement",
                  "src": "2849:99:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3543,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "2966:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3544,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "endTime",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1342,
                            "src": "2966:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2966:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3546,
                          "name": "epochStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3354,
                          "src": "2989:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2966:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d7573742062652066726f6d2063757272656e742065706f6368",
                        "id": 3548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3001:39:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_96d4ffb371f63e5d1396cadf9759aeaab5b6cf69d6a549eaf5b8466c2238ad48",
                          "typeString": "literal_string \"Assessment must be from current epoch\""
                        },
                        "value": "Assessment must be from current epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_96d4ffb371f63e5d1396cadf9759aeaab5b6cf69d6a549eaf5b8466c2238ad48",
                          "typeString": "literal_string \"Assessment must be from current epoch\""
                        }
                      ],
                      "id": 3542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "2958:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2958:83:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3550,
                  "nodeType": "ExpressionStatement",
                  "src": "2958:83:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3553,
                                  "name": "assessment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3502,
                                  "src": "3064:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Assessment_$1295",
                                    "typeString": "contract Assessment"
                                  }
                                },
                                "id": 3554,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "assessmentStage",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1370,
                                "src": "3064:26:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_enum$_Stage_$1364_$",
                                  "typeString": "function () view external returns (enum AssessmentData.Stage)"
                                }
                              },
                              "id": 3555,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3064:28:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            ],
                            "id": 3552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3059:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 3556,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3059:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 3557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3097:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "src": "3059:39:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736d656e74206d75737420626520636f6d706c65746564",
                        "id": 3559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3100:30:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7185e2efd9cf1cbfa8432c1db0cdc716590fdbcb0c62e253c528267adf231555",
                          "typeString": "literal_string \"Assessment must be completed\""
                        },
                        "value": "Assessment must be completed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7185e2efd9cf1cbfa8432c1db0cdc716590fdbcb0c62e253c528267adf231555",
                          "typeString": "literal_string \"Assessment must be completed\""
                        }
                      ],
                      "id": 3551,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3051:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3051:80:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3561,
                  "nodeType": "ExpressionStatement",
                  "src": "3051:80:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 3566,
                                  "name": "_assessor",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3494,
                                  "src": "3198:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3564,
                                  "name": "assessment",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3502,
                                  "src": "3173:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Assessment_$1295",
                                    "typeString": "contract Assessment"
                                  }
                                },
                                "id": 3565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "assessorStage",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1368,
                                "src": "3173:24:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_enum$_Stage_$1364_$",
                                  "typeString": "function (address) view external returns (enum AssessmentData.Stage)"
                                }
                              },
                              "id": 3567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3173:35:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_Stage_$1364",
                                "typeString": "enum AssessmentData.Stage"
                              }
                            ],
                            "id": 3563,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3168:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": "uint"
                          },
                          "id": 3568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3168:41:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "34",
                          "id": 3569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3213:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4_by_1",
                            "typeString": "int_const 4"
                          },
                          "value": "4"
                        },
                        "src": "3168:46:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4173736573736f72206973206e6f742070617274206f66206d616a6f7269747920636c7573746572",
                        "id": 3571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3216:42:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_31f58cf301da050bb15d855d5b4eeb35d27af5ea6d0d1b03270f12615acdc4c3",
                          "typeString": "literal_string \"Assessor is not part of majority cluster\""
                        },
                        "value": "Assessor is not part of majority cluster"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_31f58cf301da050bb15d855d5b4eeb35d27af5ea6d0d1b03270f12615acdc4c3",
                          "typeString": "literal_string \"Assessor is not part of majority cluster\""
                        }
                      ],
                      "id": 3562,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3160:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3160:99:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3573,
                  "nodeType": "ExpressionStatement",
                  "src": "3160:99:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3575,
                          "name": "_tokenSalt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3498,
                          "src": "3277:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3576,
                              "name": "assessment",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3502,
                              "src": "3291:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Assessment_$1295",
                                "typeString": "contract Assessment"
                              }
                            },
                            "id": 3577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "cost",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1346,
                            "src": "3291:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 3578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3291:17:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3277:31:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73616c74206d757374206265203c3d207374616b65",
                        "id": 3580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3310:23:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6079c31c2d2d8f0586fb7e1deb4323422bb607356cdf8b1d123165a5680a6d1d",
                          "typeString": "literal_string \"salt must be <= stake\""
                        },
                        "value": "salt must be <= stake"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6079c31c2d2d8f0586fb7e1deb4323422bb607356cdf8b1d123165a5680a6d1d",
                          "typeString": "literal_string \"salt must be <= stake\""
                        }
                      ],
                      "id": 3574,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "3269:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3269:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3582,
                  "nodeType": "ExpressionStatement",
                  "src": "3269:65:11"
                },
                {
                  "assignments": [
                    3584
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3584,
                      "name": "distance",
                      "nodeType": "VariableDeclaration",
                      "scope": 3607,
                      "src": "3345:13:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3583,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3345:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3593,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 3586,
                        "name": "_assessor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3494,
                        "src": "3379:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3587,
                        "name": "_assessment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3496,
                        "src": "3390:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 3588,
                        "name": "_tokenSalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3498,
                        "src": "3403:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 3589,
                            "name": "assessment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3502,
                            "src": "3415:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Assessment_$1295",
                              "typeString": "contract Assessment"
                            }
                          },
                          "id": 3590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "salt",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1352,
                          "src": "3415:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view external returns (bytes32)"
                          }
                        },
                        "id": 3591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3415:17:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3585,
                      "name": "getTicketDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3649,
                      "src": "3361:17:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_uint256_$",
                        "typeString": "function (address,address,uint256,bytes32) view returns (uint256)"
                      }
                    },
                    "id": 3592,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3361:72:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3345:88:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3596,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3594,
                      "name": "distance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3584,
                      "src": "3447:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 3595,
                      "name": "closestDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3373,
                      "src": "3458:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3447:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3606,
                  "nodeType": "IfStatement",
                  "src": "3443:115:11",
                  "trueBody": {
                    "id": 3605,
                    "nodeType": "Block",
                    "src": "3475:83:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3597,
                            "name": "closestDistance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3373,
                            "src": "3489:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3598,
                            "name": "distance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3584,
                            "src": "3507:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3489:26:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 3600,
                        "nodeType": "ExpressionStatement",
                        "src": "3489:26:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3601,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "3529:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 3602,
                            "name": "_assessor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3494,
                            "src": "3538:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3529:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3604,
                        "nodeType": "ExpressionStatement",
                        "src": "3529:18:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 3608,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "submitTicket",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3499,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3494,
                  "name": "_assessor",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2496:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3493,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2496:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3496,
                  "name": "_assessment",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2515:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3495,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2515:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3498,
                  "name": "_tokenSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3608,
                  "src": "2536:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3497,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2536:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2495:57:11"
            },
            "returnParameters": {
              "id": 3500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2560:0:11"
            },
            "scope": 3809,
            "src": "2473:1091:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3648,
              "nodeType": "Block",
              "src": "4034:190:11",
              "statements": [
                {
                  "assignments": [
                    3622
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3622,
                      "name": "hash",
                      "nodeType": "VariableDeclaration",
                      "scope": 3648,
                      "src": "4044:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 3621,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4044:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 3634,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 3627,
                                "name": "_assessor",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3610,
                                "src": "4088:9:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3628,
                                "name": "_assessment",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3612,
                                "src": "4099:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3629,
                                "name": "_tokenSalt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3614,
                                "src": "4112:10:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 3630,
                                "name": "_assessmentSalt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3616,
                                "src": "4124:15:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 3625,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5954,
                                "src": "4071:3:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 3626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "4071:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 3631,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4071:69:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 3624,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5961,
                          "src": "4061:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 3632,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4061:80:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 3623,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "4056:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_uint256_$",
                        "typeString": "type(uint256)"
                      },
                      "typeName": "uint"
                    },
                    "id": 3633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4056:86:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4044:98:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3635,
                      "name": "distance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3619,
                      "src": "4152:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3636,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4163:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3637,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4175:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4163:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3642,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4201:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3643,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4208:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4201:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 3645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "Conditional",
                      "src": "4163:54:11",
                      "trueExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3641,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3639,
                          "name": "epochHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3356,
                          "src": "4182:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3640,
                          "name": "hash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3622,
                          "src": "4194:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4182:16:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4152:65:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3647,
                  "nodeType": "ExpressionStatement",
                  "src": "4152:65:11"
                }
              ]
            },
            "documentation": "@param _tokenSalt A number smaller than the amount of tokens staked by the assessor\n @param _assessmentSalt Taken from assessment, generated by XOR-ing the salts of all revealing assessors\n @return the distance to the target hash of a given ticket",
            "id": 3649,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getTicketDistance",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3617,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3610,
                  "name": "_assessor",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3876:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3609,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3876:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3612,
                  "name": "_assessment",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3903:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3611,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3903:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3614,
                  "name": "_tokenSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3932:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3613,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3932:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3616,
                  "name": "_assessmentSalt",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "3957:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3615,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3957:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3866:120:11"
            },
            "returnParameters": {
              "id": 3620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3619,
                  "name": "distance",
                  "nodeType": "VariableDeclaration",
                  "scope": 3649,
                  "src": "4015:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3618,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "4015:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4014:15:11"
            },
            "scope": 3809,
            "src": "3840:384:11",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3737,
              "nodeType": "Block",
              "src": "4370:641:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3660,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 3653,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5969,
                          "src": "4388:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3658,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3656,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 3654,
                                  "name": "epochStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3354,
                                  "src": "4395:10:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 3655,
                                  "name": "epochLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3358,
                                  "src": "4408:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4395:24:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3657,
                                "name": "waitingPeriod",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3360,
                                "src": "4422:13:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4395:40:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3659,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4394:42:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4388:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "45706f636820616e642077616974696e6720706572696f64206d757374206265206f766572",
                        "id": 3661,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4438:39:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eaf171613008b963b14617fb16af9174b9e422538f0d88f3451a5645a788da92",
                          "typeString": "literal_string \"Epoch and waiting period must be over\""
                        },
                        "value": "Epoch and waiting period must be over"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eaf171613008b963b14617fb16af9174b9e422538f0d88f3451a5645a788da92",
                          "typeString": "literal_string \"Epoch and waiting period must be over\""
                        }
                      ],
                      "id": 3652,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "4380:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4380:98:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3663,
                  "nodeType": "ExpressionStatement",
                  "src": "4380:98:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 3668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 3664,
                      "name": "winner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3366,
                      "src": "4492:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 3666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4510:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 3665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4502:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 3667,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4502:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4492:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 3703,
                  "nodeType": "IfStatement",
                  "src": "4488:286:11",
                  "trueBody": {
                    "id": 3702,
                    "nodeType": "Block",
                    "src": "4514:260:11",
                    "statements": [
                      {
                        "assignments": [
                          3670
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3670,
                            "name": "mintAddress",
                            "nodeType": "VariableDeclaration",
                            "scope": 3702,
                            "src": "4528:19:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 3669,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4528:7:11",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 3683,
                        "initialValue": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 3677,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 3671,
                                "name": "coinbase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3377,
                                "src": "4550:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                  "typeString": "mapping(address => address)"
                                }
                              },
                              "id": 3673,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 3672,
                                "name": "winner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3366,
                                "src": "4559:6:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4550:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 3675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4578:1:11",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 3674,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4570:7:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 3676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4570:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "src": "4550:30:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "id": 3681,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "4602:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "4550:58:11",
                          "trueExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 3678,
                              "name": "coinbase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3377,
                              "src": "4583:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                                "typeString": "mapping(address => address)"
                              }
                            },
                            "id": 3680,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 3679,
                              "name": "winner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3366,
                              "src": "4592:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4583:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4528:80:11"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 3686,
                              "name": "mintAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3670,
                              "src": "4643:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 3687,
                              "name": "reward",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3352,
                              "src": "4656:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 3684,
                              "name": "fathomToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3362,
                              "src": "4626:11:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_FathomToken_$3062",
                                "typeString": "contract FathomToken"
                              }
                            },
                            "id": 3685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2979,
                            "src": "4626:16:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) external returns (bool)"
                            }
                          },
                          "id": 3688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4626:37:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 3695,
                        "nodeType": "IfStatement",
                        "src": "4622:109:11",
                        "trueBody": {
                          "id": 3694,
                          "nodeType": "Block",
                          "src": "4665:66:11",
                          "statements": [
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 3690,
                                    "name": "winner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3366,
                                    "src": "4701:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 3691,
                                    "name": "reward",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3352,
                                    "src": "4709:6:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 3689,
                                  "name": "TokensMinted",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3413,
                                  "src": "4688:12:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 3692,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4688:28:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3693,
                              "nodeType": "EmitStatement",
                              "src": "4683:33:11"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 3700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 3696,
                            "name": "winner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3366,
                            "src": "4744:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 3698,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4761:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 3697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4753:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 3699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4753:10:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "4744:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3701,
                        "nodeType": "ExpressionStatement",
                        "src": "4744:19:11"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3704,
                      "name": "epochStart",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3354,
                      "src": "4839:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 3705,
                        "name": "epochStart",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3354,
                        "src": "4852:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3711,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 3708,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 3706,
                                      "name": "now",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5969,
                                      "src": "4867:3:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 3707,
                                      "name": "epochStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3354,
                                      "src": "4873:10:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4867:16:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 3709,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "4866:18:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "/",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 3710,
                                "name": "epochLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3358,
                                "src": "4887:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "4866:32:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 3712,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4865:34:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "*",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3713,
                          "name": "epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3358,
                          "src": "4902:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4865:48:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4852:61:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4839:74:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3717,
                  "nodeType": "ExpressionStatement",
                  "src": "4839:74:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3718,
                      "name": "epochHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3356,
                      "src": "4923:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 3721,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5957,
                                  "src": "4950:5:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3722,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "number",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4950:12:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 3723,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4965:1:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4950:16:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 3720,
                            "name": "blockhash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5958,
                            "src": "4940:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 3725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4940:27:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 3719,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4935:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        },
                        "typeName": "uint"
                      },
                      "id": 3726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4935:33:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4923:45:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3728,
                  "nodeType": "ExpressionStatement",
                  "src": "4923:45:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3729,
                      "name": "closestDistance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3373,
                      "src": "4978:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                        "typeString": "int_const 1157...(70 digits omitted)...9935"
                      },
                      "id": 3734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9936"
                        },
                        "id": 3732,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "32",
                          "id": 3730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4996:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "**",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "323536",
                          "id": 3731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4999:3:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_256_by_1",
                            "typeString": "int_const 256"
                          },
                          "value": "256"
                        },
                        "src": "4996:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                          "typeString": "int_const 1157...(70 digits omitted)...9936"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 3733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5003:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "4996:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                        "typeString": "int_const 1157...(70 digits omitted)...9935"
                      }
                    },
                    "src": "4978:26:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3736,
                  "nodeType": "ExpressionStatement",
                  "src": "4978:26:11"
                }
              ]
            },
            "documentation": "@notice Called by anyone to end the current epoch, start the next one and trigger a payout to the winner",
            "id": 3738,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endEpoch",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3650,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4360:2:11"
            },
            "returnParameters": {
              "id": 3651,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4370:0:11"
            },
            "scope": 3809,
            "src": "4343:668:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3750,
              "nodeType": "Block",
              "src": "5253:45:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3748,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 3743,
                        "name": "coinbase",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3377,
                        "src": "5263:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_address_$",
                          "typeString": "mapping(address => address)"
                        }
                      },
                      "id": 3746,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 3744,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5967,
                          "src": "5272:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5272:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5263:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3747,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3740,
                      "src": "5286:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5263:28:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3749,
                  "nodeType": "ExpressionStatement",
                  "src": "5263:28:11"
                }
              ]
            },
            "documentation": "@notice Called by participants to redirect their rewards",
            "id": 3751,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setCoinbase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3741,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3740,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 3751,
                  "src": "5231:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3739,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5231:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5230:15:11"
            },
            "returnParameters": {
              "id": 3742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5253:0:11"
            },
            "scope": 3809,
            "src": "5210:88:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3762,
              "nodeType": "Block",
              "src": "5357:31:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3760,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3758,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3348,
                      "src": "5367:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3759,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3753,
                      "src": "5375:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5367:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3761,
                  "nodeType": "ExpressionStatement",
                  "src": "5367:14:11"
                }
              ]
            },
            "documentation": null,
            "id": 3763,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3756,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3755,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5345:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5345:11:11"
              }
            ],
            "name": "setOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3754,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3753,
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 3763,
                  "src": "5322:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3752,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5322:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5321:16:11"
            },
            "returnParameters": {
              "id": 3757,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5357:0:11"
            },
            "scope": 3809,
            "src": "5304:84:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3774,
              "nodeType": "Block",
              "src": "5446:33:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3770,
                      "name": "reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3352,
                      "src": "5456:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3771,
                      "name": "_reward",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3765,
                      "src": "5465:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5456:16:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3773,
                  "nodeType": "ExpressionStatement",
                  "src": "5456:16:11"
                }
              ]
            },
            "documentation": null,
            "id": 3775,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3768,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3767,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5434:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5434:11:11"
              }
            ],
            "name": "setReward",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3766,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3765,
                  "name": "_reward",
                  "nodeType": "VariableDeclaration",
                  "scope": 3775,
                  "src": "5413:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3764,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5413:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5412:14:11"
            },
            "returnParameters": {
              "id": 3769,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5446:0:11"
            },
            "scope": 3809,
            "src": "5394:85:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3786,
              "nodeType": "Block",
              "src": "5543:38:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3782,
                      "name": "epochLength",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3358,
                      "src": "5553:11:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3783,
                      "name": "_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3777,
                      "src": "5567:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5553:21:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3785,
                  "nodeType": "ExpressionStatement",
                  "src": "5553:21:11"
                }
              ]
            },
            "documentation": null,
            "id": 3787,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3780,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3779,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5531:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5531:11:11"
              }
            ],
            "name": "setEpochLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3778,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3777,
                  "name": "_length",
                  "nodeType": "VariableDeclaration",
                  "scope": 3787,
                  "src": "5510:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3776,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5510:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5509:14:11"
            },
            "returnParameters": {
              "id": 3781,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5543:0:11"
            },
            "scope": 3809,
            "src": "5485:96:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3807,
              "nodeType": "Block",
              "src": "5654:142:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 3795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5670:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 3796,
                            "name": "_waitingPeriod",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3789,
                            "src": "5674:14:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5670:18:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 3798,
                          "name": "epochLength",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3358,
                          "src": "5691:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5670:32:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "57616974696e6720706572696f64206d757374206265206174206d6f73742068616c66206f662065706f6368",
                        "id": 3800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5704:46:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_03109a7d99d679bfe6445effddd26199dabbee818f1e8c41138bd0731998e2f7",
                          "typeString": "literal_string \"Waiting period must be at most half of epoch\""
                        },
                        "value": "Waiting period must be at most half of epoch"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_03109a7d99d679bfe6445effddd26199dabbee818f1e8c41138bd0731998e2f7",
                          "typeString": "literal_string \"Waiting period must be at most half of epoch\""
                        }
                      ],
                      "id": 3794,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5970,
                        5971
                      ],
                      "referencedDeclaration": 5971,
                      "src": "5662:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 3801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5662:89:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3802,
                  "nodeType": "ExpressionStatement",
                  "src": "5662:89:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 3805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 3803,
                      "name": "waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3360,
                      "src": "5759:13:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 3804,
                      "name": "_waitingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3789,
                      "src": "5775:14:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5759:30:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3806,
                  "nodeType": "ExpressionStatement",
                  "src": "5759:30:11"
                }
              ]
            },
            "documentation": null,
            "id": 3808,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [],
                "id": 3792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 3791,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 3389,
                  "src": "5642:9:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5642:11:11"
              }
            ],
            "name": "setWaitingPeriod",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3789,
                  "name": "_waitingPeriod",
                  "nodeType": "VariableDeclaration",
                  "scope": 3808,
                  "src": "5614:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5614:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5613:21:11"
            },
            "returnParameters": {
              "id": 3793,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5654:0:11"
            },
            "scope": 3809,
            "src": "5587:209:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 3810,
        "src": "540:5258:11"
      }
    ],
    "src": "0:5799:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {
    "42": {
      "events": {},
      "links": {},
      "address": "0x50e0e4894B4b2797434490eCde93a20A732000C3",
      "transactionHash": "0x5bbecc3c450a8f38b19441fb0dd0d54679d29f49d5f8641dd407a81704bb5a0d"
    }
  },
  "schemaVersion": "3.0.9",
  "updatedAt": "2019-06-21T15:40:45.218Z",
  "devdoc": {
    "methods": {
      "getTicketDistance(address,address,uint256,bytes32)": {
        "params": {
          "_assessmentSalt": "Taken from assessment, generated by XOR-ing the salts of all revealing assessors",
          "_tokenSalt": "A number smaller than the amount of tokens staked by the assessor"
        },
        "return": "the distance to the target hash of a given ticket"
      },
      "init(address)": {
        "details": "will be called during network deployment"
      }
    }
  },
  "userdoc": {
    "methods": {
      "endEpoch()": {
        "notice": "Called by anyone to end the current epoch, start the next one and trigger a payout to the winner"
      },
      "setCoinbase(address)": {
        "notice": "Called by participants to redirect their rewards"
      }
    },
    "notice": "Contract to manage the minting of new network tokens. New Tokens are minted once per a user-defined timeperiod (epoch) and are distributed in a lottery. Tickets can be submitted for assessors who have completed assessments as part of the majority, in the current epoch."
  }
}