{
  "contractName": "Finance",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "CREATE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "escapeHatch",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "executePayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "removeBudget",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getBudget",
      "outputs": [
        {
          "name": "budget",
          "type": "uint256"
        },
        {
          "name": "hasBudget",
          "type": "bool"
        },
        {
          "name": "remainingBudget",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DISABLE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "getPayment",
      "outputs": [
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "receiver",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "initialPaymentTime",
          "type": "uint64"
        },
        {
          "name": "interval",
          "type": "uint64"
        },
        {
          "name": "maxRepeats",
          "type": "uint64"
        },
        {
          "name": "reference",
          "type": "string"
        },
        {
          "name": "disabled",
          "type": "bool"
        },
        {
          "name": "repeats",
          "type": "uint256"
        },
        {
          "name": "createdBy",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_transactionId",
          "type": "uint256"
        }
      ],
      "name": "getTransaction",
      "outputs": [
        {
          "name": "periodId",
          "type": "uint256"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "entity",
          "type": "address"
        },
        {
          "name": "isIncoming",
          "type": "bool"
        },
        {
          "name": "date",
          "type": "uint64"
        },
        {
          "name": "reference",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getPeriodTokenStatement",
      "outputs": [
        {
          "name": "expenses",
          "type": "uint256"
        },
        {
          "name": "income",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_periodId",
          "type": "uint256"
        }
      ],
      "name": "getPeriod",
      "outputs": [
        {
          "name": "isCurrent",
          "type": "bool"
        },
        {
          "name": "startTime",
          "type": "uint64"
        },
        {
          "name": "endTime",
          "type": "uint64"
        },
        {
          "name": "firstTransactionId",
          "type": "uint256"
        },
        {
          "name": "lastTransactionId",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHANGE_PERIOD_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHANGE_BUDGETS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EVMSCRIPT_REGISTRY_APP_ID",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "receiverExecutePayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_periodDuration",
          "type": "uint64"
        }
      ],
      "name": "setPeriodDuration",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_receiver",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_initialPaymentTime",
          "type": "uint64"
        },
        {
          "name": "_interval",
          "type": "uint64"
        },
        {
          "name": "_maxRepeats",
          "type": "uint64"
        },
        {
          "name": "_reference",
          "type": "string"
        }
      ],
      "name": "newPayment",
      "outputs": [
        {
          "name": "paymentId",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "setBudget",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_vault",
          "type": "address"
        },
        {
          "name": "_etherToken",
          "type": "address"
        },
        {
          "name": "_periodDuration",
          "type": "uint64"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "appId",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitializationBlock",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EXECUTE_PAYMENTS_ROLE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_PERIOD_TRANSITIONS_PER_TX",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentPeriodId",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "EVMSCRIPT_REGISTRY_APP",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_role",
          "type": "bytes32"
        },
        {
          "name": "params",
          "type": "uint256[]"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_ttl",
          "type": "uint256"
        }
      ],
      "name": "tryTransitionAccountingPeriod",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPeriodDuration",
      "outputs": [
        {
          "name": "periodDuration",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "etherToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_reference",
          "type": "string"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "from",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "tokenFallback",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_UINT64",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        }
      ],
      "name": "nextPaymentTime",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_paymentId",
          "type": "uint256"
        },
        {
          "name": "_disabled",
          "type": "bool"
        }
      ],
      "name": "setPaymentDisabled",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "kernel",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_UINT",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "depositToVault",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_PAYMENTS_PER_TX",
      "outputs": [
        {
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_script",
          "type": "bytes"
        }
      ],
      "name": "getExecutor",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vault",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "periodId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "periodStarts",
          "type": "uint64"
        },
        {
          "indexed": false,
          "name": "periodEnds",
          "type": "uint64"
        }
      ],
      "name": "NewPeriod",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "hasBudget",
          "type": "bool"
        }
      ],
      "name": "SetBudget",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "maxRepeats",
          "type": "uint64"
        }
      ],
      "name": "NewPayment",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "transactionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "incoming",
          "type": "bool"
        },
        {
          "indexed": true,
          "name": "entity",
          "type": "address"
        }
      ],
      "name": "NewTransaction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "paymentId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "disabled",
          "type": "bool"
        }
      ],
      "name": "ChangePaymentState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "newDuration",
          "type": "uint64"
        }
      ],
      "name": "ChangePeriodDuration",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "paymentId",
          "type": "uint256"
        }
      ],
      "name": "PaymentFailure",
      "type": "event"
    }
  ],
  "bytecode": "0x6060604052341561000f57600080fd5b6149f08061001e6000396000f3006060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630842ace4146101f35780631554611f14610224578063162a0cf81461022e57806318f053da1461025157806319b7d7bd1461028a57806329b522eb146102e95780633280a8361461031a57806333ea3dc8146104b957806341733dd3146105f65780634b2c0706146106535780635985feec146106d25780635b14dbc81461070357806360b1e057146107345780636436f18914610765578063671273f4146107885780636f0558b1146107b557806374bfb426146108775780637879ec31146108b957806380afdea8146109245780638b3dd749146109555780638f4ffcb11461097e578063981cc342146109f357806398547eac14610a24578063988e659514610a615780639b3fdf4c14610a8a578063a1658fad14610abb578063a19525a314610b59578063b36fec5714610b94578063b8066bcb14610bd1578063bfe07da614610c26578063c0ee0b8a14610c7c578063c9f661be14610cea578063cb045a9614610d27578063cf79af9014610d72578063d4aae0c414610da0578063e5b5019a14610df5578063efc7a86114610e1e578063f2bf78e914610e57578063f92a79ff14610e94578063fbfa77cf14610f31575b600080fd5b34156101fe57600080fd5b610206610f86565b60405180826000191660001916815260200191505060405180910390f35b61022c610fbf565b005b341561023957600080fd5b61024f60048080359060200190919050506110e2565b005b341561025c57600080fd5b610288600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061116d565b005b341561029557600080fd5b6102c1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112e7565b6040518084815260200183151515158152602001828152602001935050505060405180910390f35b34156102f457600080fd5b6102fc6113b9565b60405180826000191660001916815260200191505060405180910390f35b341561032557600080fd5b61033b60048080359060200190919050506113f2565b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018867ffffffffffffffff1667ffffffffffffffff1681526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff16815260200180602001851515151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825286818151815260200191508051906020019080838360005b8381101561047557808201518184015260208101905061045a565b50505050905090810190601f1680156104a25780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34156104c457600080fd5b6104da60048080359060200190919050506115db565b604051808981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001841515151581526020018367ffffffffffffffff1667ffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105b4578082015181840152602081019050610599565b50505050905090810190601f1680156105e15780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b341561060157600080fd5b610636600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061174c565b604051808381526020018281526020019250505060405180910390f35b341561065e57600080fd5b61067460048080359060200190919050506117c6565b60405180861515151581526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390f35b34156106dd57600080fd5b6106e5611848565b60405180826000191660001916815260200191505060405180910390f35b341561070e57600080fd5b610716611881565b60405180826000191660001916815260200191505060405180910390f35b341561073f57600080fd5b6107476118ba565b60405180826000191660001916815260200191505060405180910390f35b341561077057600080fd5b61078660048080359060200190919050506118f3565b005b341561079357600080fd5b6107b3600480803567ffffffffffffffff169060200190919050506119a1565b005b34156107c057600080fd5b610861600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff169060200190919080359060200190820180359060200191909192905050611ade565b6040518082815260200191505060405180910390f35b341561088257600080fd5b6108b7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611e99565b005b34156108c457600080fd5b610922600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803567ffffffffffffffff169060200190919050506120b1565b005b341561092f57600080fd5b610937612213565b60405180826000191660001916815260200191505060405180910390f35b341561096057600080fd5b610968612219565b6040518082815260200191505060405180910390f35b341561098957600080fd5b6109f1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050612223565b005b34156109fe57600080fd5b610a066123f3565b60405180826000191660001916815260200191505060405180910390f35b3415610a2f57600080fd5b610a3761242c565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610a6c57600080fd5b610a74612431565b6040518082815260200191505060405180910390f35b3415610a9557600080fd5b610a9d612441565b60405180826000191660001916815260200191505060405180910390f35b3415610ac657600080fd5b610b3f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560001916906020019091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506124dc565b604051808215151515815260200191505060405180910390f35b3415610b6457600080fd5b610b7a60048080359060200190919050506126dc565b604051808215151515815260200191505060405180910390f35b3415610b9f57600080fd5b610ba7612814565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610bdc57600080fd5b610be4612835565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c3157600080fd5b610c7a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019082018035906020019190919290505061285b565b005b3415610c8757600080fd5b610cd0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001919091929050506129eb565b604051808215151515815260200191505060405180910390f35b3415610cf557600080fd5b610cfd612b54565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610d3257600080fd5b610d486004808035906020019091905050612b78565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610d7d57600080fd5b610d9e60048080359060200190919080351515906020019091905050612eef565b005b3415610dab57600080fd5b610db3612fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e0057600080fd5b610e08612fe3565b6040518082815260200191505060405180910390f35b3415610e2957600080fd5b610e55600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613007565b005b3415610e6257600080fd5b610e6a613215565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610e9f57600080fd5b610eef600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061321a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610f3c57600080fd5b610f44613321565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60405180807f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cbbfb3633073ffffffffffffffffffffffffffffffffffffffff1631306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252600c8152602001807f416464696e672046756e64730000000000000000000000000000000000000000815250602001925050506000604051808303818588803b15156110cb57600080fd5b6125ee5a03f115156110dc57600080fd5b50505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902061112182613347565b61112c3383836124dc565b151561113757600080fd5b61113f613394565b61114884612b78565b67ffffffffffffffff161115151561115f57600080fd5b6111688361339c565b505050565b60405180807f4348414e47455f425544474554535f524f4c4500000000000000000000000000815250601301905060405180910390206111f1826000606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461356a565b6111fc3383836124dc565b151561120757600080fd5b600061121d600a67ffffffffffffffff166126dc565b905080151561122b57600080fd5b6000606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0360008060405180838152602001821515151581526020019250505060405180910390a250505050565b600080600080611301600a67ffffffffffffffff166126dc565b905080151561130f57600080fd5b606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1692506113af8561359c565b9150509193909250565b60405180807f44495341424c455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b600080600080600080611403614456565b60008060008060668c81548110151561141857fe5b906000526020600020906006020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169a508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950806004015498508060020160159054906101000a900467ffffffffffffffff1697508060030160009054906101000a900467ffffffffffffffff1696508060030160089054906101000a900467ffffffffffffffff1695508060030160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1692508060020160149054906101000a900460ff169350806005018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561159f5780601f106115745761010080835404028352916020019161159f565b820191906000526020600020905b81548152906001019060200180831161158257829003601f168201915b505050505094508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150509193959799509193959799565b60008060008060008060006115ee614456565b600060678a8154811015156115ff57fe5b906000526020600020906006020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508060010160149054906101000a900460ff1693508060010160159054906101000a900467ffffffffffffffff169250806002015498508060030154975080600401549650806005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117395780601f1061170e57610100808354040283529160200191611739565b820191906000526020600020905b81548152906001019060200180831161171c57829003601f168201915b5050505050915050919395975091939597565b600080600060688581548110151561176057fe5b906000526020600020906004020160030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509250929050565b6000806000806000806068878154811015156117de57fe5b90600052602060002090600402019050866117f7612431565b1495508060000160009054906101000a900467ffffffffffffffff1694508060000160089054906101000a900467ffffffffffffffff16935080600101549250806002015491505091939590929450565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902081565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902081565b60405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902081565b6118fb613394565b61190482612b78565b67ffffffffffffffff161115151561191b57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1660668281548110151561194157fe5b906000526020600020906006020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561199557600080fd5b61199e8161339c565b50565b60405180807f4348414e47455f504552494f445f524f4c45000000000000000000000000000081525060120190506040518091039020611a0e8267ffffffffffffffff16606960000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16613739565b611a193383836124dc565b1515611a2457600080fd5b6000611a3a600a67ffffffffffffffff166126dc565b9050801515611a4857600080fd5b60018467ffffffffffffffff16111515611a6157600080fd5b83606960000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc984604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a150505050565b60008060405180807f4352454154455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020611b388b8b8b8a67ffffffffffffffff168a67ffffffffffffffff166137a5565b611b433383836124dc565b1515611b4e57600080fd5b6000611b64600a67ffffffffffffffff166126dc565b9050801515611b7257600080fd5b6000606960010160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611c105750606960020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1515611c1b57600080fd5b611c23613394565b8a67ffffffffffffffff1611158015611c46575060018867ffffffffffffffff16145b15611c5d57611c588d8d8d60006137f1565b611e89565b60668054809190600101611c71919061446a565b9450606685815481101515611c8257fe5b906000526020600020906006020193508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460040181905550898460020160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460030160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508686856005019190611db592919061449c565b50338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b73ffffffffffffffffffffffffffffffffffffffff16857f1369b17360a33c63f419d46a6fa8f1b39af8d45a18af87cf320305140ab6e4b68a604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a3611e64613394565b611e6d86612b78565b67ffffffffffffffff16111515611e8857611e878561339c565b5b5b5050505098975050505050505050565b60405180807f4348414e47455f425544474554535f524f4c450000000000000000000000000081525060130190506040518091039020611f1c8383606960010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461356a565b611f273383836124dc565b1515611f3257600080fd5b6000611f48600a67ffffffffffffffff166126dc565b9050801515611f5657600080fd5b83606960010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561204f576001606960020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8473ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0385600160405180838152602001821515151581526020019250505060405180910390a25050505050565b60006003541415156120c257600080fd5b6120ca613b7a565b60018167ffffffffffffffff161115156120e357600080fd5b82606460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160668181805490500191508161217d919061446a565b5060016066600081548110151561219057fe5b906000526020600020906006020160020160146101000a81548160ff02191690831515021790555060016067818180549050019150816121d0919061451c565b5080606960000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555061220d612208613394565b613b9b565b50505050565b60015481565b6000600354905090565b60008061223a600a67ffffffffffffffff166126dc565b905080151561224857600080fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561228257600080fd5b3391506122c382888887878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd88606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156123c457600080fd5b6102c65a03f115156123d557600080fd5b5050506040518051905015156123ea57600080fd5b50505050505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b600a81565b6000600160688054905003905090565b60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081525060130190506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902081565b60006124e661454e565b600080845111156124ff57602084510290508391508082525b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d157506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdef9106873088866000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561266757808201518184015260208101905061264c565b50505050905090810190601f1680156126945780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15156126b557600080fd5b6102c65a03f115156126c657600080fd5b505050604051805190505b925050509392505050565b600080600060686126eb612431565b8154811015156126f757fe5b906000526020600020906004020191508160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16612732613394565b111515612742576001925061280d565b600082600101541415156127625760016067805490500382600201819055505b6127a061279b60018460000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16613d3590919063ffffffff16565b613b9b565b90508060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff166127cd613394565b11156128085760008414156127e5576000925061280d565b6128016127fc600186613d6a90919063ffffffff16565b6126dc565b925061280d565b600192505b5050919050565b6000606960000160009054906101000a900467ffffffffffffffff16905090565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612871600a67ffffffffffffffff166126dc565b905080151561287f57600080fd5b6128bd85338686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd33606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156129be57600080fd5b6102c65a03f115156129cf57600080fd5b5050506040518051905015156129e457600080fd5b5050505050565b6000806000612a04600a67ffffffffffffffff166126dc565b9050801515612a1257600080fd5b339150612a5382888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612b2057600080fd5b6102c65a03f11515612b3157600080fd5b505050604051805190501515612b4657600080fd5b600192505050949350505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000612b82614562565b600080606685815481101515612b9457fe5b906000526020600020906006020161014060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160149054906101000a900460ff161515151581526020016002820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160048201548152602001600582018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e375780601f10612e0c57610100808354040283529160200191612e37565b820191906000526020600020905b815481529060010190602001808311612e1a57829003601f168201915b50505050508152505092508260c0015167ffffffffffffffff168360e0015167ffffffffffffffff16101515612e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9350612ee7565b612ebe8360a0015167ffffffffffffffff168460e0015167ffffffffffffffff16613d8690919063ffffffff16565b9150612ee182846080015167ffffffffffffffff16613dbc90919063ffffffff16565b90508093505b505050919050565b60405180807f44495341424c455f5041594d454e54535f524f4c45000000000000000000000081525060150190506040518091039020612f2e83613347565b612f393383836124dc565b1515612f4457600080fd5b82606685815481101515612f5457fe5b906000526020600020906006020160020160146101000a81548160ff021916908315150217905550837faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161284604051808215151515815260200191505060405180910390a250505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000808291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156130b057600080fd5b6102c65a03f115156130c157600080fd5b5050506040518051905090506000811115156130dc57600080fd5b61311d8230836040805190810160405280601081526020017f4465706f73697420746f205661756c7400000000000000000000000000000000815250613d1f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156131ea57600080fd5b6102c65a03f115156131fb57600080fd5b50505060405180519050151561321057600080fd5b505050565b601481565b6000613224613ddd565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836000604051602001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132b4578082015181840152602081019050613299565b50505050905090810190601f1680156132e15780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15156132ff57600080fd5b6102c65a03f1151561331057600080fd5b505050604051805190509050919050565b606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61334f614628565b600160405180591061335e5750595b908082528060200260200182016040525090508181600081518110151561338157fe5b9060200190602002018181525050919050565b600042905090565b60008060006133b5600a67ffffffffffffffff166126dc565b90508015156133c357600080fd5b6066848154811015156133d257fe5b906000526020600020906006020192508260020160149054906101000a900460ff1615151561340057600080fd5b600091505b61340d613394565b61341685612b78565b67ffffffffffffffff16111580156134425750601467ffffffffffffffff168267ffffffffffffffff16105b15613563576134798360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460040154613f3b565b15156134bb577f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f51846040518082815260200191505060405180910390a1613564565b60018360030160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018201915061355e8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560040154876137f1565b613405565b5b50505050565b613572614628565b6135938473ffffffffffffffffffffffffffffffffffffffff16848461403c565b90509392505050565b600080606960020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561361d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150613733565b6068613627612431565b81548110151561363357fe5b906000526020600020906004020160030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050606960010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015156136db5760009150613733565b61373081606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d6a90919063ffffffff16565b91505b50919050565b613741614628565b60026040518059106137505750595b908082528060200260200182016040525090508281600081518110151561377357fe5b90602001906020020181815250508181600181518110151561379157fe5b906020019060200201818152505092915050565b6137ad614628565b6137e68673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168686866140c7565b905095945050505050565b816137fb8561359c565b1015151561380857600080fd5b6138276000858585856020604051908101604052806000815250614190565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561398f57606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64b6e5f8585856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b151561397657600080fd5b6102c65a03f1151561398757600080fd5b505050613b74565b606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64b6e5f8530856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1515613a8757600080fd5b6102c65a03f11515613a9857600080fd5b505050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3fef3a384846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515613b5f57600080fd5b6102c65a03f11515613b7057600080fd5b5050505b50505050565b6000600354141515613b8b57600080fd5b613b9361441e565b600381905550565b600080600060688054809190600101613bb4919061463c565b9150606882815481101515613bc557fe5b90600052602060002090600402019050838160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550613c536001613c3b606960000160009054906101000a900467ffffffffffffffff168767ffffffffffffffff16613d3590919063ffffffff16565b67ffffffffffffffff1661442690919063ffffffff16565b8160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550817f0e0ddff6b1aa31c43a5c0c94ac361b1d5d2a3c5c7ef5450a614d0362e47d7ef08260000160009054906101000a900467ffffffffffffffff168360000160089054906101000a900467ffffffffffffffff16604051808367ffffffffffffffff1667ffffffffffffffff1681526020018267ffffffffffffffff1667ffffffffffffffff1681526020019250505060405180910390a28092505050919050565b613d2f6001858585600086614190565b50505050565b60008082840190508367ffffffffffffffff168167ffffffffffffffff1610151515613d6057600080fd5b8091505092915050565b6000828211151515613d7b57600080fd5b818303905092915050565b60008082840290506000841480613da75750828482811515613da457fe5b04145b1515613db257600080fd5b8091505092915050565b6000808284019050838110151515613dd357600080fd5b8091505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342c71f1d60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390206000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1515613f1757600080fd5b6102c65a03f11515613f2857600080fd5b5050506040518051905090508091505090565b600081613f478461359c565b101580156140345750818373ffffffffffffffffffffffffffffffffffffffff166370a08231606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561401657600080fd5b6102c65a03f1151561402757600080fd5b5050506040518051905010155b905092915050565b614044614628565b60036040518059106140535750595b908082528060200260200182016040525090508381600081518110151561407657fe5b90602001906020020181815250508281600181518110151561409457fe5b9060200190602002018181525050818160028151811015156140b257fe5b90602001906020020181815250509392505050565b6140cf614628565b60056040518059106140de5750595b908082528060200260200182016040525090508581600081518110151561410157fe5b90602001906020020181815250508481600181518110151561411f57fe5b90602001906020020181815250508381600281518110151561413d57fe5b90602001906020020181815250508281600381518110151561415b57fe5b90602001906020020181815250508181600481518110151561417957fe5b906020019060200201818152505095945050505050565b60008060008060006141a0612431565b94506068858154811015156141b157fe5b906000526020600020906004020160030160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508a1561422b5761421e888560010154613dbc90919063ffffffff16565b846001018190555061424b565b614242888560000154613dbc90919063ffffffff16565b84600001819055505b6067805480919060010161425f919061451c565b925060678381548110151561427057fe5b906000526020600020906006020191508482600201819055508782600301819055508682600401819055508a8260010160146101000a81548160ff021916908315150217905550898260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550888260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614345613394565b8260010160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508582600501908051906020019061438792919061466e565b5060688581548110151561439757fe5b906000526020600020906004020190506000816001015414156143be578281600101819055505b8873ffffffffffffffffffffffffffffffffffffffff16837f8e926e9dfc571efd7e91569a402e58777f1a907d545346ea7406341b7b8ffe0d8d604051808215151515815260200191505060405180910390a35050505050505050505050565b600043905090565b60008267ffffffffffffffff168267ffffffffffffffff161115151561444b57600080fd5b818303905092915050565b602060405190810160405280600081525090565b8154818355818115116144975760060281600602836000526020600020918201910161449691906146ee565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144dd57803560ff191683800117855561450b565b8280016001018555821561450b579182015b8281111561450a5782358255916020019190600101906144ef565b5b509050614518919061481a565b5090565b81548183558181151161454957600602816006028360005260206000209182019101614548919061483f565b5b505050565b602060405190810160405280600081525090565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff16815260200160008152602001614622614903565b81525090565b602060405190810160405280600081525090565b815481835581811511614669576004028160040283600052602060002091820191016146689190614917565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146af57805160ff19168380011785556146dd565b828001600101855582156146dd579182015b828111156146dc5782518255916020019190600101906146c1565b5b5090506146ea919061481a565b5090565b61481791905b8082111561481357600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549060ff02191690556002820160156101000a81549067ffffffffffffffff02191690556003820160006101000a81549067ffffffffffffffff02191690556003820160086101000a81549067ffffffffffffffff02191690556003820160106101000a81549067ffffffffffffffff0219169055600482016000905560058201600061480a919061497c565b506006016146f4565b5090565b90565b61483c91905b80821115614838576000816000905550600101614820565b5090565b90565b61490091905b808211156148fc57600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff02191690556001820160156101000a81549067ffffffffffffffff02191690556002820160009055600382016000905560048201600090556005820160006148f3919061497c565b50600601614845565b5090565b90565b602060405190810160405280600081525090565b61497991905b8082111561497557600080820160006101000a81549067ffffffffffffffff02191690556000820160086101000a81549067ffffffffffffffff0219169055600182016000905560028201600090555060040161491d565b5090565b90565b50805460018160011615610100020316600290046000825580601f106149a257506149c1565b601f0160209004906000526020600020908101906149c0919061481a565b5b505600a165627a7a72305820346755548ab3a97765a622a451319127227934168f1f8a8d4e411e190d6985ff0029",
  "deployedBytecode": "0x6060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630842ace4146101f35780631554611f14610224578063162a0cf81461022e57806318f053da1461025157806319b7d7bd1461028a57806329b522eb146102e95780633280a8361461031a57806333ea3dc8146104b957806341733dd3146105f65780634b2c0706146106535780635985feec146106d25780635b14dbc81461070357806360b1e057146107345780636436f18914610765578063671273f4146107885780636f0558b1146107b557806374bfb426146108775780637879ec31146108b957806380afdea8146109245780638b3dd749146109555780638f4ffcb11461097e578063981cc342146109f357806398547eac14610a24578063988e659514610a615780639b3fdf4c14610a8a578063a1658fad14610abb578063a19525a314610b59578063b36fec5714610b94578063b8066bcb14610bd1578063bfe07da614610c26578063c0ee0b8a14610c7c578063c9f661be14610cea578063cb045a9614610d27578063cf79af9014610d72578063d4aae0c414610da0578063e5b5019a14610df5578063efc7a86114610e1e578063f2bf78e914610e57578063f92a79ff14610e94578063fbfa77cf14610f31575b600080fd5b34156101fe57600080fd5b610206610f86565b60405180826000191660001916815260200191505060405180910390f35b61022c610fbf565b005b341561023957600080fd5b61024f60048080359060200190919050506110e2565b005b341561025c57600080fd5b610288600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061116d565b005b341561029557600080fd5b6102c1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112e7565b6040518084815260200183151515158152602001828152602001935050505060405180910390f35b34156102f457600080fd5b6102fc6113b9565b60405180826000191660001916815260200191505060405180910390f35b341561032557600080fd5b61033b60048080359060200190919050506113f2565b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018867ffffffffffffffff1667ffffffffffffffff1681526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff16815260200180602001851515151581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825286818151815260200191508051906020019080838360005b8381101561047557808201518184015260208101905061045a565b50505050905090810190601f1680156104a25780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b34156104c457600080fd5b6104da60048080359060200190919050506115db565b604051808981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001841515151581526020018367ffffffffffffffff1667ffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156105b4578082015181840152602081019050610599565b50505050905090810190601f1680156105e15780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b341561060157600080fd5b610636600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061174c565b604051808381526020018281526020019250505060405180910390f35b341561065e57600080fd5b61067460048080359060200190919050506117c6565b60405180861515151581526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390f35b34156106dd57600080fd5b6106e5611848565b60405180826000191660001916815260200191505060405180910390f35b341561070e57600080fd5b610716611881565b60405180826000191660001916815260200191505060405180910390f35b341561073f57600080fd5b6107476118ba565b60405180826000191660001916815260200191505060405180910390f35b341561077057600080fd5b61078660048080359060200190919050506118f3565b005b341561079357600080fd5b6107b3600480803567ffffffffffffffff169060200190919050506119a1565b005b34156107c057600080fd5b610861600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff1690602001909190803567ffffffffffffffff169060200190919080359060200190820180359060200191909192905050611ade565b6040518082815260200191505060405180910390f35b341561088257600080fd5b6108b7600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611e99565b005b34156108c457600080fd5b610922600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803567ffffffffffffffff169060200190919050506120b1565b005b341561092f57600080fd5b610937612213565b60405180826000191660001916815260200191505060405180910390f35b341561096057600080fd5b610968612219565b6040518082815260200191505060405180910390f35b341561098957600080fd5b6109f1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192905050612223565b005b34156109fe57600080fd5b610a066123f3565b60405180826000191660001916815260200191505060405180910390f35b3415610a2f57600080fd5b610a3761242c565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610a6c57600080fd5b610a74612431565b6040518082815260200191505060405180910390f35b3415610a9557600080fd5b610a9d612441565b60405180826000191660001916815260200191505060405180910390f35b3415610ac657600080fd5b610b3f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560001916906020019091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506124dc565b604051808215151515815260200191505060405180910390f35b3415610b6457600080fd5b610b7a60048080359060200190919050506126dc565b604051808215151515815260200191505060405180910390f35b3415610b9f57600080fd5b610ba7612814565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610bdc57600080fd5b610be4612835565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c3157600080fd5b610c7a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019082018035906020019190919290505061285b565b005b3415610c8757600080fd5b610cd0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001919091929050506129eb565b604051808215151515815260200191505060405180910390f35b3415610cf557600080fd5b610cfd612b54565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610d3257600080fd5b610d486004808035906020019091905050612b78565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610d7d57600080fd5b610d9e60048080359060200190919080351515906020019091905050612eef565b005b3415610dab57600080fd5b610db3612fbe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610e0057600080fd5b610e08612fe3565b6040518082815260200191505060405180910390f35b3415610e2957600080fd5b610e55600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613007565b005b3415610e6257600080fd5b610e6a613215565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b3415610e9f57600080fd5b610eef600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061321a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610f3c57600080fd5b610f44613321565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60405180807f4352454154455f5041594d454e54535f524f4c450000000000000000000000008152506014019050604051809103902081565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cbbfb3633073ffffffffffffffffffffffffffffffffffffffff1631306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252600c8152602001807f416464696e672046756e64730000000000000000000000000000000000000000815250602001925050506000604051808303818588803b15156110cb57600080fd5b6125ee5a03f115156110dc57600080fd5b50505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902061112182613347565b61112c3383836124dc565b151561113757600080fd5b61113f613394565b61114884612b78565b67ffffffffffffffff161115151561115f57600080fd5b6111688361339c565b505050565b60405180807f4348414e47455f425544474554535f524f4c4500000000000000000000000000815250601301905060405180910390206111f1826000606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461356a565b6111fc3383836124dc565b151561120757600080fd5b600061121d600a67ffffffffffffffff166126dc565b905080151561122b57600080fd5b6000606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508373ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0360008060405180838152602001821515151581526020019250505060405180910390a250505050565b600080600080611301600a67ffffffffffffffff166126dc565b905080151561130f57600080fd5b606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1692506113af8561359c565b9150509193909250565b60405180807f44495341424c455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b600080600080600080611403614456565b60008060008060668c81548110151561141857fe5b906000526020600020906006020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169a508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169950806004015498508060020160159054906101000a900467ffffffffffffffff1697508060030160009054906101000a900467ffffffffffffffff1696508060030160089054906101000a900467ffffffffffffffff1695508060030160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1692508060020160149054906101000a900460ff169350806005018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561159f5780601f106115745761010080835404028352916020019161159f565b820191906000526020600020905b81548152906001019060200180831161158257829003601f168201915b505050505094508060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150509193959799509193959799565b60008060008060008060006115ee614456565b600060678a8154811015156115ff57fe5b906000526020600020906006020190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1695508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508060010160149054906101000a900460ff1693508060010160159054906101000a900467ffffffffffffffff169250806002015498508060030154975080600401549650806005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117395780601f1061170e57610100808354040283529160200191611739565b820191906000526020600020905b81548152906001019060200180831161171c57829003601f168201915b5050505050915050919395975091939597565b600080600060688581548110151561176057fe5b906000526020600020906004020160030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509250929050565b6000806000806000806068878154811015156117de57fe5b90600052602060002090600402019050866117f7612431565b1495508060000160009054906101000a900467ffffffffffffffff1694508060000160089054906101000a900467ffffffffffffffff16935080600101549250806002015491505091939590929450565b60405180807f4348414e47455f504552494f445f524f4c4500000000000000000000000000008152506012019050604051809103902081565b60405180807f4348414e47455f425544474554535f524f4c45000000000000000000000000008152506013019050604051809103902081565b60405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902081565b6118fb613394565b61190482612b78565b67ffffffffffffffff161115151561191b57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1660668281548110151561194157fe5b906000526020600020906006020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561199557600080fd5b61199e8161339c565b50565b60405180807f4348414e47455f504552494f445f524f4c45000000000000000000000000000081525060120190506040518091039020611a0e8267ffffffffffffffff16606960000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16613739565b611a193383836124dc565b1515611a2457600080fd5b6000611a3a600a67ffffffffffffffff166126dc565b9050801515611a4857600080fd5b60018467ffffffffffffffff16111515611a6157600080fd5b83606960000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa32389dd0d5a3bf7cc635f8c30fee3b70d06a6c547d6dbf31628378ee267bfc984604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a150505050565b60008060405180807f4352454154455f5041594d454e54535f524f4c4500000000000000000000000081525060140190506040518091039020611b388b8b8b8a67ffffffffffffffff168a67ffffffffffffffff166137a5565b611b433383836124dc565b1515611b4e57600080fd5b6000611b64600a67ffffffffffffffff166126dc565b9050801515611b7257600080fd5b6000606960010160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180611c105750606960020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1515611c1b57600080fd5b611c23613394565b8a67ffffffffffffffff1611158015611c46575060018867ffffffffffffffff16145b15611c5d57611c588d8d8d60006137f1565b611e89565b60668054809190600101611c71919061446a565b9450606685815481101515611c8257fe5b906000526020600020906006020193508c8460000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b8460010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8460040181905550898460020160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550888460030160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550878460030160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508686856005019190611db592919061449c565b50338460020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b73ffffffffffffffffffffffffffffffffffffffff16857f1369b17360a33c63f419d46a6fa8f1b39af8d45a18af87cf320305140ab6e4b68a604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390a3611e64613394565b611e6d86612b78565b67ffffffffffffffff16111515611e8857611e878561339c565b5b5b5050505098975050505050505050565b60405180807f4348414e47455f425544474554535f524f4c450000000000000000000000000081525060130190506040518091039020611f1c8383606960010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461356a565b611f273383836124dc565b1515611f3257600080fd5b6000611f48600a67ffffffffffffffff166126dc565b9050801515611f5657600080fd5b83606960010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550606960020160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561204f576001606960020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8473ffffffffffffffffffffffffffffffffffffffff167f6e768d8fe4a1460cae6d5af9382c3e9abbc41f66f2ec91fda24b12e3c2796f0385600160405180838152602001821515151581526020019250505060405180910390a25050505050565b60006003541415156120c257600080fd5b6120ca613b7a565b60018167ffffffffffffffff161115156120e357600080fd5b82606460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160668181805490500191508161217d919061446a565b5060016066600081548110151561219057fe5b906000526020600020906006020160020160146101000a81548160ff02191690831515021790555060016067818180549050019150816121d0919061451c565b5080606960000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555061220d612208613394565b613b9b565b50505050565b60015481565b6000600354905090565b60008061223a600a67ffffffffffffffff166126dc565b905080151561224857600080fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561228257600080fd5b3391506122c382888887878080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd88606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156123c457600080fd5b6102c65a03f115156123d557600080fd5b5050506040518051905015156123ea57600080fd5b50505050505050565b60405180807f455845435554455f5041594d454e54535f524f4c4500000000000000000000008152506015019050604051809103902081565b600a81565b6000600160688054905003905090565b60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081525060130190506040518091039020604051808360001916600019168152602001826000191660001916815260200192505050604051809103902081565b60006124e661454e565b600080845111156124ff57602084510290508391508082525b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d157506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdef9106873088866000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561266757808201518184015260208101905061264c565b50505050905090810190601f1680156126945780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15156126b557600080fd5b6102c65a03f115156126c657600080fd5b505050604051805190505b925050509392505050565b600080600060686126eb612431565b8154811015156126f757fe5b906000526020600020906004020191508160000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16612732613394565b111515612742576001925061280d565b600082600101541415156127625760016067805490500382600201819055505b6127a061279b60018460000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16613d3590919063ffffffff16565b613b9b565b90508060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff166127cd613394565b11156128085760008414156127e5576000925061280d565b6128016127fc600186613d6a90919063ffffffff16565b6126dc565b925061280d565b600192505b5050919050565b6000606960000160009054906101000a900467ffffffffffffffff16905090565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612871600a67ffffffffffffffff166126dc565b905080151561287f57600080fd5b6128bd85338686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8473ffffffffffffffffffffffffffffffffffffffff166323b872dd33606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156129be57600080fd5b6102c65a03f115156129cf57600080fd5b5050506040518051905015156129e457600080fd5b5050505050565b6000806000612a04600a67ffffffffffffffff166126dc565b9050801515612a1257600080fd5b339150612a5382888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050613d1f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612b2057600080fd5b6102c65a03f11515612b3157600080fd5b505050604051805190501515612b4657600080fd5b600192505050949350505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000612b82614562565b600080606685815481101515612b9457fe5b906000526020600020906006020161014060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160149054906101000a900460ff161515151581526020016002820160159054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016003820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160048201548152602001600582018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e375780601f10612e0c57610100808354040283529160200191612e37565b820191906000526020600020905b815481529060010190602001808311612e1a57829003601f168201915b50505050508152505092508260c0015167ffffffffffffffff168360e0015167ffffffffffffffff16101515612e8f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9350612ee7565b612ebe8360a0015167ffffffffffffffff168460e0015167ffffffffffffffff16613d8690919063ffffffff16565b9150612ee182846080015167ffffffffffffffff16613dbc90919063ffffffff16565b90508093505b505050919050565b60405180807f44495341424c455f5041594d454e54535f524f4c45000000000000000000000081525060150190506040518091039020612f2e83613347565b612f393383836124dc565b1515612f4457600080fd5b82606685815481101515612f5457fe5b906000526020600020906006020160020160146101000a81548160ff021916908315150217905550837faca91836ee6e44bf1c422f7ee89afb243a4fb775d9fe87150ff5f8e566dc161284604051808215151515815260200191505060405180910390a250505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6000808291508173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156130b057600080fd5b6102c65a03f115156130c157600080fd5b5050506040518051905090506000811115156130dc57600080fd5b61311d8230836040805190810160405280601081526020017f4465706f73697420746f205661756c7400000000000000000000000000000000815250613d1f565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156131ea57600080fd5b6102c65a03f115156131fb57600080fd5b50505060405180519050151561321057600080fd5b505050565b601481565b6000613224613ddd565b73ffffffffffffffffffffffffffffffffffffffff166304bf2a7f836000604051602001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132b4578082015181840152602081019050613299565b50505050905090810190601f1680156132e15780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15156132ff57600080fd5b6102c65a03f1151561331057600080fd5b505050604051805190509050919050565b606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61334f614628565b600160405180591061335e5750595b908082528060200260200182016040525090508181600081518110151561338157fe5b9060200190602002018181525050919050565b600042905090565b60008060006133b5600a67ffffffffffffffff166126dc565b90508015156133c357600080fd5b6066848154811015156133d257fe5b906000526020600020906006020192508260020160149054906101000a900460ff1615151561340057600080fd5b600091505b61340d613394565b61341685612b78565b67ffffffffffffffff16111580156134425750601467ffffffffffffffff168267ffffffffffffffff16105b15613563576134798360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460040154613f3b565b15156134bb577f5f352e4123f4620cacbb8eb0dd683705aaa3e1f9384adbbd85b665b205097f51846040518082815260200191505060405180910390a1613564565b60018360030160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018201915061355e8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560040154876137f1565b613405565b5b50505050565b613572614628565b6135938473ffffffffffffffffffffffffffffffffffffffff16848461403c565b90509392505050565b600080606960020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561361d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150613733565b6068613627612431565b81548110151561363357fe5b906000526020600020906004020160030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050606960010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811015156136db5760009150613733565b61373081606960010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d6a90919063ffffffff16565b91505b50919050565b613741614628565b60026040518059106137505750595b908082528060200260200182016040525090508281600081518110151561377357fe5b90602001906020020181815250508181600181518110151561379157fe5b906020019060200201818152505092915050565b6137ad614628565b6137e68673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168686866140c7565b905095945050505050565b816137fb8561359c565b1015151561380857600080fd5b6138276000858585856020604051908101604052806000815250614190565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151561398f57606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64b6e5f8585856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b151561397657600080fd5b6102c65a03f1151561398757600080fd5b505050613b74565b606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64b6e5f8530856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1515613a8757600080fd5b6102c65a03f11515613a9857600080fd5b505050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f3fef3a384846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515613b5f57600080fd5b6102c65a03f11515613b7057600080fd5b5050505b50505050565b6000600354141515613b8b57600080fd5b613b9361441e565b600381905550565b600080600060688054809190600101613bb4919061463c565b9150606882815481101515613bc557fe5b90600052602060002090600402019050838160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550613c536001613c3b606960000160009054906101000a900467ffffffffffffffff168767ffffffffffffffff16613d3590919063ffffffff16565b67ffffffffffffffff1661442690919063ffffffff16565b8160000160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550817f0e0ddff6b1aa31c43a5c0c94ac361b1d5d2a3c5c7ef5450a614d0362e47d7ef08260000160009054906101000a900467ffffffffffffffff168360000160089054906101000a900467ffffffffffffffff16604051808367ffffffffffffffff1667ffffffffffffffff1681526020018267ffffffffffffffff1667ffffffffffffffff1681526020019250505060405180910390a28092505050919050565b613d2f6001858585600086614190565b50505050565b60008082840190508367ffffffffffffffff168167ffffffffffffffff1610151515613d6057600080fd5b8091505092915050565b6000828211151515613d7b57600080fd5b818303905092915050565b60008082840290506000841480613da75750828482811515613da457fe5b04145b1515613db257600080fd5b8091505092915050565b6000808284019050838110151515613dd357600080fd5b8091505092915050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342c71f1d60405180807f61707000000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060405180807f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152506013019050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390206000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1515613f1757600080fd5b6102c65a03f11515613f2857600080fd5b5050506040518051905090508091505090565b600081613f478461359c565b101580156140345750818373ffffffffffffffffffffffffffffffffffffffff166370a08231606460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561401657600080fd5b6102c65a03f1151561402757600080fd5b5050506040518051905010155b905092915050565b614044614628565b60036040518059106140535750595b908082528060200260200182016040525090508381600081518110151561407657fe5b90602001906020020181815250508281600181518110151561409457fe5b9060200190602002018181525050818160028151811015156140b257fe5b90602001906020020181815250509392505050565b6140cf614628565b60056040518059106140de5750595b908082528060200260200182016040525090508581600081518110151561410157fe5b90602001906020020181815250508481600181518110151561411f57fe5b90602001906020020181815250508381600281518110151561413d57fe5b90602001906020020181815250508281600381518110151561415b57fe5b90602001906020020181815250508181600481518110151561417957fe5b906020019060200201818152505095945050505050565b60008060008060006141a0612431565b94506068858154811015156141b157fe5b906000526020600020906004020160030160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002093508a1561422b5761421e888560010154613dbc90919063ffffffff16565b846001018190555061424b565b614242888560000154613dbc90919063ffffffff16565b84600001819055505b6067805480919060010161425f919061451c565b925060678381548110151561427057fe5b906000526020600020906006020191508482600201819055508782600301819055508682600401819055508a8260010160146101000a81548160ff021916908315150217905550898260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550888260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614345613394565b8260010160156101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508582600501908051906020019061438792919061466e565b5060688581548110151561439757fe5b906000526020600020906004020190506000816001015414156143be578281600101819055505b8873ffffffffffffffffffffffffffffffffffffffff16837f8e926e9dfc571efd7e91569a402e58777f1a907d545346ea7406341b7b8ffe0d8d604051808215151515815260200191505060405180910390a35050505050505050505050565b600043905090565b60008267ffffffffffffffff168267ffffffffffffffff161115151561444b57600080fd5b818303905092915050565b602060405190810160405280600081525090565b8154818355818115116144975760060281600602836000526020600020918201910161449691906146ee565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106144dd57803560ff191683800117855561450b565b8280016001018555821561450b579182015b8281111561450a5782358255916020019190600101906144ef565b5b509050614518919061481a565b5090565b81548183558181151161454957600602816006028360005260206000209182019101614548919061483f565b5b505050565b602060405190810160405280600081525090565b61014060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff16815260200160008152602001614622614903565b81525090565b602060405190810160405280600081525090565b815481835581811511614669576004028160040283600052602060002091820191016146689190614917565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146af57805160ff19168380011785556146dd565b828001600101855582156146dd579182015b828111156146dc5782518255916020019190600101906146c1565b5b5090506146ea919061481a565b5090565b61481791905b8082111561481357600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556002820160146101000a81549060ff02191690556002820160156101000a81549067ffffffffffffffff02191690556003820160006101000a81549067ffffffffffffffff02191690556003820160086101000a81549067ffffffffffffffff02191690556003820160106101000a81549067ffffffffffffffff0219169055600482016000905560058201600061480a919061497c565b506006016146f4565b5090565b90565b61483c91905b80821115614838576000816000905550600101614820565b5090565b90565b61490091905b808211156148fc57600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff02191690556001820160156101000a81549067ffffffffffffffff02191690556002820160009055600382016000905560048201600090556005820160006148f3919061497c565b50600601614845565b5090565b90565b602060405190810160405280600081525090565b61497991905b8082111561497557600080820160006101000a81549067ffffffffffffffff02191690556000820160086101000a81549067ffffffffffffffff0219169055600182016000905560028201600090555060040161491d565b5090565b90565b50805460018160011615610100020316600290046000825580601f106149a257506149c1565b601f0160209004906000526020600020908101906149c0919061481a565b5b505600a165627a7a72305820346755548ab3a97765a622a451319127227934168f1f8a8d4e411e190d6985ff0029",
  "sourceMap": "484:20302:5:-;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "484:20302:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;823:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3642:165;;;;;;9992:208;;;;;;;;;;;;;;;;;;;;;;;;;;9571:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;16107:279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1163:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13364:690;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14060:593:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15124:286:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14659:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;991:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68:84:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10392:232:5;;;;;;;;;;;;;;;;;;;;;;;;;;8576:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;6947:1437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9078:354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4120:427;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;113:20:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;269:107:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5377:459:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1075:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;655:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16392:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;158:103:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;506:494:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12308:1035:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15981:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2303:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4784:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6047:370;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15416:559;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10834:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;86:21:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;770:46:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11472:357;;;;;;;;;;;;;;;;;;;;;;;;;;;;602:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:169:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2279:18:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;823:80;870:33;;;;;;;;;;;;;;;;;;;823:80;:::o;3642:165::-;3727:10;;;;;;;;;;;:22;;;3756:4;:12;;;3778:4;3727:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3642:165::o;9992:208::-;1123:34;;;;;;;;;;;;;;;;;;;10065:15;10069:10;10065:3;:15::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;10140:14:5;:12;:14::i;:::-;10109:27;10125:10;10109:15;:27::i;:::-;:45;;;;10101:54;;;;;;;;10166:27;10182:10;10166:15;:27::i;:::-;9992:208;;;:::o;9571:238::-;1037:32;;;;;;;;;;;;;;;;;;;9634:58;9646:6;9663:1;9667:8;:16;;:24;9684:6;9667:24;;;;;;;;;;;;;;;;9634:3;:58::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;3200:23:5;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;9760:5;9731:8;:18;;:26;9750:6;9731:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;9785:6;9775:27;;;9793:1;9796:5;9775:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;492:1:20;9571:238:5;;;:::o;16107:279::-;16176:14;16192;16208:23;3200;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;16252:8;:16;;:24;16269:6;16252:24;;;;;;;;;;;;;;;;16243:33;;16298:8;:18;;:26;16317:6;16298:26;;;;;;;;;;;;;;;;;;;;;;;;;16286:38;;16352:27;16372:6;16352:19;:27::i;:::-;16334:45;;16107:279;;;;;;:::o;1163:82::-;1211:34;;;;;;;;;;;;;;;;;;;1163:82;:::o;13364:690::-;13425:11;13438:16;13456:14;13472:25;13499:15;13516:17;13535:16;;:::i;:::-;13553:13;13568:15;13585:17;13614:23;13640:8;13649:10;13640:20;;;;;;;;;;;;;;;;;;;;13614:46;;13679:7;:13;;;;;;;;;;;;13671:21;;13713:7;:16;;;;;;;;;;;;13702:27;;13748:7;:14;;;13739:23;;13793:7;:26;;;;;;;;;;;;13772:47;;13840:7;:16;;;;;;;;;;;;13829:27;;13879:7;:18;;;;;;;;;;;;13866:31;;13917:7;:15;;;;;;;;;;;;13907:25;;;;13953:7;:16;;;;;;;;;;;;13942:27;;13991:7;:17;;13979:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14030:7;:17;;;;;;;;;;;;14018:29;;13364:690;;;;;;;;;;;;:::o;14060:593::-;14129:16;14147:14;14163:17;14182:11;14195:14;14211:15;14228:11;14241:16;;:::i;:::-;14269:31;14303:12;14316:14;14303:28;;;;;;;;;;;;;;;;;;;;14269:62;;14350:11;:17;;;;;;;;;;;;14342:25;;14386:11;:18;;;;;;;;;;;;14377:27;;14427:11;:22;;;;;;;;;;;;14414:35;;14466:11;:16;;;;;;;;;;;;14459:23;;14503:11;:20;;;14492:31;;14542:11;:18;;;14533:27;;14582:11;:21;;;14570:33;;14625:11;:21;;14613:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14060:593;;;;;;;;;;:::o;15124:286::-;15213:16;15231:14;15257:37;15297:7;15305:9;15297:18;;;;;;;;;;;;;;;;;;;;:33;;:41;15331:6;15297:41;;;;;;;;;;;;;;;15257:81;;15356:14;:23;;;15381:14;:21;;;15348:55;;;;15124:286;;;;;;:::o;14659:459::-;14718:14;14734:16;14752:14;14768:26;14796:25;14833:21;14857:7;14865:9;14857:18;;;;;;;;;;;;;;;;;;;;14833:42;;14919:9;14898:17;:15;:17::i;:::-;:30;14886:42;;14951:6;:16;;;;;;;;;;;;14939:28;;14987:6;:14;;;;;;;;;;;;14977:24;;15032:6;:25;;;15011:46;;15087:6;:24;;;15067:44;;14659:459;;;;;;;;:::o;909:76::-;954:31;;;;;;;;;;;;;;;;;;;909:76;:::o;991:78::-;1037:32;;;;;;;;;;;;;;;;;;;991:78;:::o;68:84:31:-;120:32;;;;;;;;;;;;;;;;;;;68:84;:::o;10392:232:5:-;10502:14;:12;:14::i;:::-;10471:27;10487:10;10471:15;:27::i;:::-;:45;;;;10463:54;;;;;;;;10568:10;10535:43;;:8;10544:10;10535:20;;;;;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;10527:52;;;;;;;;10590:27;10606:10;10590:15;:27::i;:::-;10392:232;:::o;8576:312::-;954:31;;;;;;;;;;;;;;;;;;;8653:63;8665:15;8657:24;;8691:8;:23;;;;;;;;;;;;8683:32;;8653:3;:63::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;3200:23:5;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;8781:1;8763:15;:19;;;8755:28;;;;;;;;8819:15;8793:8;:23;;;:41;;;;;;;;;;;;;;;;;;8844:37;8865:15;8844:37;;;;;;;;;;;;;;;;;;;;;;492:1:20;8576:312:5;;;:::o;6947:1437::-;7294:17;7855:23;870:33;;;;;;;;;;;;;;;;;;;7192:64;7204:6;7213:9;7224:7;7233:9;7192:64;;7244:11;7192:64;;:3;:64::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;3200:23:5;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;7363:1;7336:8;:16;;:24;7353:6;7336:24;;;;;;;;;;;;;;;;:28;:59;;;;7369:8;:18;;:26;7388:6;7369:26;;;;;;;;;;;;;;;;;;;;;;;;;7368:27;7336:59;7328:68;;;;;;;;7541:14;:12;:14::i;:::-;7518:19;:37;;;;:57;;;;;7574:1;7559:11;:16;;;7518:57;7514:291;;;7591:183;7632:6;7656:9;7683:7;7708:1;7591:23;:183::i;:::-;7788:7;;7514:291;7827:8;:17;;;;;;;;;;;:::i;:::-;7815:29;;7881:8;7890:9;7881:19;;;;;;;;;;;;;;;;;;;;7855:45;;7926:6;7910:7;:13;;;:22;;;;;;;;;;;;;;;;;;7961:9;7942:7;:16;;;:28;;;;;;;;;;;;;;;;;;7997:7;7980;:14;;:24;;;;8043:19;8014:7;:26;;;:48;;;;;;;;;;;;;;;;;;8091:9;8072:7;:16;;;:28;;;;;;;;;;;;;;;;;;8131:11;8110:7;:18;;;:32;;;;;;;;;;;;;;;;;;8172:10;;8152:7;:17;;:30;;;;;;;:::i;:::-;;8212:10;8192:7;:17;;;:30;;;;;;;;;;;;;;;;;;8255:9;8233:45;;8244:9;8233:45;8266:11;8233:45;;;;;;;;;;;;;;;;;;;;;;8323:14;:12;:14::i;:::-;8293:26;8309:9;8293:15;:26::i;:::-;:44;;;;8289:88;;;8351:26;8367:9;8351:15;:26::i;:::-;8289:88;3333:1;492::20;6947:1437:5;;;;;;;;;;;;;:::o;9078:354::-;1037:32;;;;;;;;;;;;;;;;;;;9155:55;9167:6;9176:7;9185:8;:16;;:24;9202:6;9185:24;;;;;;;;;;;;;;;;9155:3;:55::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;3200:23:5;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;9276:7;9249:8;:16;;:24;9266:6;9249:24;;;;;;;;;;;;;;;:34;;;;9298:8;:18;;:26;9317:6;9298:26;;;;;;;;;;;;;;;;;;;;;;;;;9297:27;9293:91;;;9369:4;9340:8;:18;;:26;9359:6;9340:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;9293:91;9403:6;9393:32;;;9411:7;9420:4;9393:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;492:1:20;9078:354:5;;;;:::o;4120:427::-;163:1:25;140:19;;:24;132:33;;;;;;;;4230:13:5;:11;:13::i;:::-;4280:1;4262:15;:19;;;4254:28;;;;;;;;4301:6;4293:5;;:14;;;;;;;;;;;;;;;;;;4330:11;4317:10;;:24;;;;;;;;;;;;;;;;;;4371:1;4352:8;:20;;;;;;;;;;;;;;:::i;:::-;;4405:4;4382:8;4391:1;4382:11;;;;;;;;;;;;;;;;;;;;:20;;;:27;;;;;;;;;;;;;;;;;;4443:1;4420:12;:24;;;;;;;;;;;;;;:::i;:::-;;4481:15;4455:8;:23;;;:41;;;;;;;;;;;;;;;;;;4506:34;4524:14;:12;:14::i;:::-;4506:10;:34::i;:::-;;4120:427;;;:::o;113:20:19:-;;;;:::o;269:107:25:-;324:7;350:19;;343:26;;269:107;:::o;5377:459:5:-;5597:11;3200:23;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;5580:6;5566:20;;:10;:20;;;5558:29;;;;;;;;5617:10;5597:31;;5638:122;5678:5;5697;5716:7;5744:5;;5638:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;:122::i;:::-;5778:5;:18;;;5797:5;5812;;;;;;;;;;;5820:7;5778:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:59;;;;;;;;5377:459;;;;;;;:::o;1075:82::-;1123:34;;;;;;;;;;;;;;;;;;;1075:82;:::o;655:57::-;710:2;655:57;:::o;16392:99::-;16440:7;16483:1;16466:7;:14;;;;:18;16459:25;;16392:99;:::o;158:103:31:-;217:16;;;;;;;;;;;;;;;;;;;120:32;;;;;;;;;;;;;;;;;;;207:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;158:103;:::o;506:494:20:-;597:4;613:16;;:::i;:::-;722:18;705:1;689:6;:13;:17;685:212;;;759:2;743:6;:13;:18;722:39;;809:6;802:13;;862:10;857:3;850:6;784:103;932:1;921:6;;;;;;;;;;;913:20;;;:80;;;;937:6;;;;;;;;;;;:20;;;958:7;975:4;982:5;989:3;937:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;913:80:20;906:87;;506:494;;;;;;;:::o;12308:1035:5:-;12377:12;12401:28;12930:24;12432:7;12440:17;:15;:17::i;:::-;12432:26;;;;;;;;;;;;;;;;;;;;12401:57;;12490:13;:21;;;;;;;;;;;;12472:39;;:14;:12;:14::i;:::-;:39;;12468:68;;;12532:4;12525:11;;;;12468:68;12802:1;12766:13;:32;;;:37;;12762:112;;;12873:1;12851:12;:19;;;;:23;12817:13;:31;;:57;;;;12762:112;12957:40;12968:28;12994:1;12968:13;:21;;;;;;;;;;;;:25;;;;:28;;;;:::i;:::-;12957:10;:40::i;:::-;12930:67;;13097:9;:17;;;;;;;;;;;;13080:34;;:14;:12;:14::i;:::-;:34;13076:239;;;13142:1;13134:4;:9;13130:43;;;13168:5;13161:12;;;;13130:43;13262:42;13292:11;13301:1;13292:4;:8;;:11;;;;:::i;:::-;13262:29;:42::i;:::-;13255:49;;;;13076:239;13332:4;13325:11;;12308:1035;;;;;;:::o;15981:120::-;16031:21;16071:8;:23;;;;;;;;;;;;16064:30;;15981:120;:::o;2303:28::-;;;;;;;;;;;;;:::o;4784:311::-;3200:23;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;4888:125;4928:6;4948:10;4972:7;4993:10;;4888:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;:125::i;:::-;5031:6;:19;;;5051:10;5071:5;;;;;;;;;;;5079:7;5031:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5023:65;;;;;;;;4784:311;;;;;:::o;6047:370::-;6148:12;6172:11;3200:23;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;6192:10;6172:31;;6213:119;6253:5;6272:4;6290:6;6317:4;;6213:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:26;:119::i;:::-;6350:5;:14;;;6373:5;;;;;;;;;;;6381:6;6350:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6342:47;;;;;;;;6406:4;6399:11;;6047:370;;;;;;;;:::o;718:46::-;761:2;718:46;:::o;15416:559::-;15482:6;15500:22;;:::i;:::-;15777:16;15861:19;15525:8;15534:10;15525:20;;;;;;;;;;;;;;;;;;;;15500:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15579:7;:18;;;15560:37;;:7;:15;;;:37;;;;15556:72;;;761:2;15611:17;;;;15556:72;15796:55;15833:7;:16;;;15825:25;;15804:7;:15;;;15796:24;;:28;;:55;;;;:::i;:::-;15777:74;;15883:49;15923:8;15891:7;:26;;;15883:35;;:39;;:49;;;;:::i;:::-;15861:71;;15956:11;15942:26;;15416:559;;;;;;;:::o;10834:228::-;1211:34;;;;;;;;;;;;;;;;;;;10927:15;10931:10;10927:3;:15::i;:::-;444:37:20;455:10;467:5;474:6;444:10;:37::i;:::-;436:46;;;;;;;;10995:9:5;10963:8;10972:10;10963:20;;;;;;;;;;;;;;;;;;;;:29;;;:41;;;;;;;;;;;;;;;;;;11033:10;11014:41;11045:9;11014:41;;;;;;;;;;;;;;;;;;;;;;10834:228;;;;:::o;86:21:19:-;;;;;;;;;;;;;:::o;770:46:5:-;813:2;770:46;:::o;11472:357::-;11529:11;11566:13;11549:6;11529:27;;11582:5;:15;;;11598:4;11582:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11566:37;;11629:1;11621:5;:9;11613:18;;;;;;;;11642:124;11682:5;11701:4;11719:5;11642:124;;;;;;;;;;;;;;;;;;:26;:124::i;:::-;11784:5;:14;;;11807:5;;;;;;;;;;;11815;11784:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11776:46;;;;;;;;11472:357;;;:::o;602:47::-;647:2;602:47;:::o;824:169:29:-;881:18;937:21;:19;:21::i;:::-;:39;;;977:7;937:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;911:75:29;;824:169;;;:::o;2279:18:5:-;;;;;;;;;;;;;:::o;1358:117:12:-;1406:11;;:::i;:::-;1447:1;1433:16;;;;;;;;;;;;;;;;;;;;;;;;1429:20;;1466:2;1459:1;1461;1459:4;;;;;;;;;;;;;;;;;:9;;;;;1358:117;;;:::o;20713:71:5:-;20760:7;20778:3;20771:10;;20713:71;:::o;16962:688::-;17044:23;17137:12;3200:23;3226:60;710:2;3226:60;;:29;:60::i;:::-;3200:86;;3304:18;3296:27;;;;;;;;17070:8;17079:10;17070:20;;;;;;;;;;;;;;;;;;;;17044:46;;17109:7;:16;;;;;;;;;;;;17108:17;17100:26;;;;;;;;17152:1;17137:16;;17163:481;17201:14;:12;:14::i;:::-;17170:27;17186:10;17170:15;:27::i;:::-;:45;;;;:76;;;;;647:2;17219:27;;:5;:27;;;17170:76;17163:481;;;17267:46;17283:7;:13;;;;;;;;;;;;17298:7;:14;;;17267:15;:46::i;:::-;17266:47;17262:136;;;17333:26;17348:10;17333:26;;;;;;;;;;;;;;;;;;17377:7;;17262:136;17431:1;17412:7;:15;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17455:1;17446:10;;;;17471:162;17512:7;:13;;;;;;;;;;;;17543:7;:16;;;;;;;;;;;;17577:7;:14;;;17609:10;17471:23;:162::i;:::-;17163:481;;;3333:1;16962:688;;;;:::o;593:133:12:-;665:11;;:::i;:::-;695:24;707:2;699:11;;712:2;716;695:3;:24::i;:::-;688:31;;593:133;;;;;:::o;20188:519:5:-;20256:7;20346:13;20280:8;:18;;:26;20299:6;20280:26;;;;;;;;;;;;;;;;;;;;;;;;;20279:27;20275:60;;;813:2;20320:15;;;;20275:60;20362:7;20370:17;:15;:17::i;:::-;20362:26;;;;;;;;;;;;;;;;;;;;:41;;:49;20404:6;20362:49;;;;;;;;;;;;;;;:58;;;20346:74;;20601:8;:16;;:24;20618:6;20601:24;;;;;;;;;;;;;;;;20592:5;:33;;20588:59;;;20646:1;20639:8;;;;20588:59;20665:35;20694:5;20665:8;:16;;:24;20682:6;20665:24;;;;;;;;;;;;;;;;:28;;:35;;;;:::i;:::-;20658:42;;20188:519;;;;;:::o;1481:148:12:-;1541:11;;:::i;:::-;1582:1;1568:16;;;;;;;;;;;;;;;;;;;;;;;;1564:20;;1601:2;1594:1;1596;1594:4;;;;;;;;;;;;;;;;;:9;;;;;1620:2;1613:1;1615;1613:4;;;;;;;;;;;;;;;;;:9;;;;;1481:148;;;;:::o;864:174::-;960:11;;:::i;:::-;990:41;1002:2;994:11;;1015:2;1007:11;;1020:2;1024;1028;990:3;:41::i;:::-;983:48;;864:174;;;;;;;:::o;17656:703:5:-;17863:7;17832:27;17852:6;17832:19;:27::i;:::-;:38;;17824:47;;;;;;;;17881:151;17913:5;17932:6;17952:9;17975:7;17996:10;17881:151;;;;;;;;;;;;;:18;:151::i;:::-;18074:10;;;;;;;;;;;18047:38;;18055:6;18047:38;;;;18043:310;;;18101:5;;;;;;;;;;;:20;;;18122:6;18130:9;18141:7;18101:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18043:310;;;18180:5;;;;;;;;;;;:20;;;18201:6;18217:4;18224:7;18180:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:10;;;;;;;;;;;:19;;;18293:9;18304:7;18273:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18043:310;17656:703;;;;:::o;487:96:25:-;163:1;140:19;;:24;132:33;;;;;;;;560:16;:14;:16::i;:::-;538:19;:38;;;;487:96::o;16518:438:5:-;16575:6;16601:19;16650:21;16623:7;:16;;;;;;;;;;;:::i;:::-;16601:38;;16674:7;16682:11;16674:20;;;;;;;;;;;;;;;;;;;;16650:44;;16723:10;16704:6;:16;;;:29;;;;;;;;;;;;;;;;;;16812:46;16856:1;16812:39;16827:8;:23;;;;;;;;;;;;16812:10;:14;;;;:39;;;;:::i;:::-;:43;;;;:46;;;;:::i;:::-;16795:6;:14;;;:63;;;;;;;;;;;;;;;;;;16879:11;16869:56;16892:6;:16;;;;;;;;;;;;16910:6;:14;;;;;;;;;;;;16869:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16943:6;16936:13;;16518:438;;;;;:::o;18365:392::-;18535:215;18567:4;18615:6;18636:7;18657;18678:1;18730:10;18535:18;:215::i;:::-;18365:392;;;;:::o;674:126:54:-;730:6;744:8;759:1;755;:5;744:16;;779:1;774:6;;:1;:6;;;;766:15;;;;;;;;794:1;787:8;;674:126;;;;;:::o;555:111:53:-;613:7;641:1;636;:6;;628:15;;;;;;;;660:1;656;:5;649:12;;555:111;;;;:::o;138:144::-;196:7;211:9;227:1;223;:5;211:17;;247:1;242;:6;:20;;;;261:1;256;252;:5;;;;;;;;:10;242:20;234:29;;;;;;;;276:1;269:8;;138:144;;;;;:::o;670:130::-;728:7;743:9;759:1;755;:5;743:17;;779:1;774;:6;;766:15;;;;;;;;794:1;787:8;;670:130;;;;;:::o;1021:200:29:-;1075:18;1105:20;1128:6;;;;;;;;;;;:13;;;217:16:31;;;;;;;;;;;;;;;;;;;120:32;;;;;;;;;;;;;;;;;;;207:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:37:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1105:60;;1201:12;1175:39;;1021:200;;:::o;19988:194:5:-;20067:4;20121:7;20090:27;20110:6;20090:19;:27::i;:::-;:38;;:85;;;;;20168:7;20132:6;:16;;;20157:5;;;;;;;;;;;20132:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:43;;20090:85;20083:92;;19988:194;;;;:::o;1635:179:12:-;1707:11;;:::i;:::-;1748:1;1734:16;;;;;;;;;;;;;;;;;;;;;;;;1730:20;;1767:2;1760:1;1762;1760:4;;;;;;;;;;;;;;;;;:9;;;;;1786:2;1779:1;1781;1779:4;;;;;;;;;;;;;;;;;:9;;;;;1805:2;1798:1;1800;1798:4;;;;;;;;;;;;;;;;;:9;;;;;1635:179;;;;;:::o;2036:241::-;2132:11;;:::i;:::-;2173:1;2159:16;;;;;;;;;;;;;;;;;;;;;;;;2155:20;;2192:2;2185:1;2187;2185:4;;;;;;;;;;;;;;;;;:9;;;;;2211:2;2204:1;2206;2204:4;;;;;;;;;;;;;;;;;:9;;;;;2230:2;2223:1;2225;2223:4;;;;;;;;;;;;;;;;;:9;;;;;2249:2;2242:1;2244;2242:4;;;;;;;;;;;;;;;;;:9;;;;;2268:2;2261:1;2263;2261:4;;;;;;;;;;;;;;;;;:9;;;;;2036:241;;;;;;;:::o;18763:1219:5:-;18975:16;19021:37;19312:21;19367:31;19775:21;18994:17;:15;:17::i;:::-;18975:36;;19061:7;19069:8;19061:17;;;;;;;;;;;;;;;;;;;;:32;;:40;19094:6;19061:40;;;;;;;;;;;;;;;19021:80;;19115:9;19111:191;;;19164:34;19190:7;19164:14;:21;;;:25;;:34;;;;:::i;:::-;19140:14;:21;;:58;;;;19111:191;;;19255:36;19283:7;19255:14;:23;;;:27;;:36;;;;:::i;:::-;19229:14;:23;;:62;;;;19111:191;19336:12;:21;;;;;;;;;;;:::i;:::-;19312:45;;19401:12;19414:13;19401:27;;;;;;;;;;;;;;;;;;;;19367:61;;19461:8;19438:11;:20;;:31;;;;19500:7;19479:11;:18;;:28;;;;19541:10;19517:11;:21;;:34;;;;19586:9;19561:11;:22;;;:34;;;;;;;;;;;;;;;;;;19625:6;19605:11;:17;;;:26;;;;;;;;;;;;;;;;;;19662:7;19641:11;:18;;;:28;;;;;;;;;;;;;;;;;;19705:14;:12;:14::i;:::-;19679:11;:16;;;:41;;;;;;;;;;;;;;;;;;19754:10;19730:11;:21;;:34;;;;;;;;;;;;:::i;:::-;;19799:7;19807:8;19799:17;;;;;;;;;;;;;;;;;;;;19775:41;;19859:1;19830:6;:25;;;:30;19826:89;;;19902:13;19874:6;:25;;:41;;;;19826:89;19967:7;19926:49;;19941:13;19926:49;19956:9;19926:49;;;;;;;;;;;;;;;;;;;;;;18763:1219;;;;;;;;;;;:::o;767:94:25:-;816:7;842:12;835:19;;767:94;:::o;562:108:54:-;618:6;645:1;640:6;;:1;:6;;;;632:15;;;;;;;;664:1;660;:5;653:12;;562:108;;;;:::o;484:20302:5:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o",
  "source": "pragma solidity 0.4.18;\n\nimport \"@aragon/os/contracts/apps/AragonApp.sol\";\nimport \"@aragon/os/contracts/common/EtherToken.sol\";\nimport \"@aragon/os/contracts/lib/erc677/ERC677Receiver.sol\";\n\nimport \"@aragon/os/contracts/lib/zeppelin/token/ERC20.sol\";\nimport \"@aragon/os/contracts/lib/zeppelin/math/SafeMath.sol\";\nimport \"@aragon/os/contracts/lib/zeppelin/math/SafeMath64.sol\";\n\nimport \"@aragon/apps-vault/contracts/Vault.sol\";\n\nimport \"@aragon/os/contracts/lib/misc/Migrations.sol\";\n\n\ncontract Finance is AragonApp, ERC677Receiver {\n    using SafeMath for uint256;\n    using SafeMath64 for uint64;\n\n    uint64 constant public MAX_PAYMENTS_PER_TX = 20;\n    uint64 constant public MAX_PERIOD_TRANSITIONS_PER_TX = 10;\n    uint64 constant public MAX_UINT64 = uint64(-1);\n    uint256 constant public MAX_UINT = uint256(-1);\n\n    bytes32 constant public CREATE_PAYMENTS_ROLE = keccak256(\"CREATE_PAYMENTS_ROLE\");\n    bytes32 constant public CHANGE_PERIOD_ROLE = keccak256(\"CHANGE_PERIOD_ROLE\");\n    bytes32 constant public CHANGE_BUDGETS_ROLE = keccak256(\"CHANGE_BUDGETS_ROLE\");\n    bytes32 constant public EXECUTE_PAYMENTS_ROLE = keccak256(\"EXECUTE_PAYMENTS_ROLE\");\n    bytes32 constant public DISABLE_PAYMENTS_ROLE = keccak256(\"DISABLE_PAYMENTS_ROLE\");\n\n    // order optimized for storage\n    struct Payment {\n        ERC20 token;\n        address receiver;\n        address createdBy;\n        bool disabled;\n        uint64 initialPaymentTime;\n        uint64 interval;\n        uint64 maxRepeats;\n        uint64 repeats;\n        uint256 amount;\n        string reference;\n    }\n\n    // order optimized for storage\n    struct Transaction {\n        ERC20 token;\n        address entity;\n        bool isIncoming;\n        uint64 date;\n        uint256 periodId;\n        uint256 amount;\n        uint256 paymentId;\n        string reference;\n    }\n\n    struct TokenStatement {\n        uint256 expenses;\n        uint256 income;\n    }\n\n    struct Period {\n        uint64 startTime;\n        uint64 endTime;\n        uint256 firstTransactionId;\n        uint256 lastTransactionId;\n\n        mapping (address => TokenStatement) tokenStatement;\n    }\n\n    struct Settings {\n        uint64 periodDuration;\n        mapping (address => uint256) budgets;\n        mapping (address => bool) hasBudget;\n    }\n\n    Vault public vault;\n    EtherToken public etherToken;\n\n    Payment[] payments; // first index is 1\n    Transaction[] transactions; // first index is 1\n    Period[] periods; // first index is 0\n    Settings settings;\n\n    event NewPeriod(uint256 indexed periodId, uint64 periodStarts, uint64 periodEnds);\n    event SetBudget(address indexed token, uint256 amount, bool hasBudget);\n    event NewPayment(uint256 indexed paymentId, address indexed recipient, uint64 maxRepeats);\n    event NewTransaction(uint256 indexed transactionId, bool incoming, address indexed entity);\n    event ChangePaymentState(uint256 indexed paymentId, bool disabled);\n    event ChangePeriodDuration(uint64 newDuration);\n    event PaymentFailure(uint256 paymentId);\n\n    // Modifier used by all methods that impact accounting to make sure accounting period\n    // is changed before the operation if needed\n    modifier transitionsPeriod {\n        bool completeTransition = tryTransitionAccountingPeriod(MAX_PERIOD_TRANSITIONS_PER_TX);\n        require(completeTransition);\n        _;\n    }\n\n    /**\n     * @dev Sends ETH to Vault. This contract should never receive funds,\n     *      but in case it happens, this function recovers them sending them\n     *      to Vault.\n     * @notice Allows to send ETH from this contract to Vault, to avoid locking them in contract forever.\n     */\n    function escapeHatch() public payable {\n        // convert ETH to EtherToken\n        etherToken.wrapAndCall.value(this.balance)(address(this), \"Adding Funds\");\n    }\n\n    /**\n    * @notice Initialize Finance app for `_vault` with duration `_periodDuration`\n    * @param _vault Address of the vault Finance will rely on (non changeable)\n    * @param _etherToken Address of EtherToken for ether withdraws\n    * @param _periodDuration Duration in seconds of each period\n    */\n    function initialize(Vault _vault, EtherToken _etherToken, uint64 _periodDuration) external onlyInit {\n        initialized();\n\n        require(_periodDuration > 1);\n\n        vault = _vault;\n        etherToken = _etherToken;\n\n        payments.length += 1;\n        payments[0].disabled = true;\n\n        transactions.length += 1;\n\n        settings.periodDuration = _periodDuration;\n        _newPeriod(uint64(getTimestamp()));\n    }\n\n    /**\n    * @dev Deposit for ERC20 approved tokens\n    * @notice Send `_amount` `_token`\n    * @param _token Address of deposited token\n    * @param _amount Amount of tokens sent\n    * @param _reference Reason for payment\n    */\n    function deposit(ERC20 _token, uint256 _amount, string _reference) external transitionsPeriod {\n        _recordIncomingTransaction(\n            _token,\n            msg.sender,\n            _amount,\n            _reference\n        );\n        require(_token.transferFrom(msg.sender, address(vault), _amount));\n    }\n\n    /**\n     * @dev Deposit for ERC20 tokens using approveAndCall\n     * @param _from Address sending the tokens\n     * @param _amount Amount of tokens sent\n     * @param _token Token being deposited\n     * @param _data Data payload being executed (payment reference)\n     */\n    function receiveApproval(\n        address _from,\n        uint256 _amount,\n        address _token,\n        bytes _data\n    )\n        transitionsPeriod\n        external\n    {\n        require(msg.sender == _token);\n        ERC20 token = ERC20(msg.sender);\n        _recordIncomingTransaction(\n            token,\n            _from,\n            _amount,\n            string(_data)\n        );\n        require(token.transferFrom(_from, address(vault), _amount));\n    }\n\n    /**\n    * @dev Deposit for ERC677 tokens\n    * @param from Address sending the tokens\n    * @param amount Amount of tokens sent\n    * @param data Data payload being executed (payment reference)\n    */\n    function tokenFallback(address from, uint256 amount, bytes data) transitionsPeriod external returns (bool success) {\n        ERC20 token = ERC20(msg.sender);\n        _recordIncomingTransaction(\n            token,\n            from,\n            amount,\n            string(data)\n        );\n        require(token.transfer(address(vault), amount));\n        return true;\n    }\n\n    /**\n    * @notice New payment\n    * @param _token Address of token for payment\n    * @param _receiver Address that will receive payment.\n    * @param _amount units of token that are payed every time the payment is due.\n    * @param _initialPaymentTime timestamp for when the first payment is done.\n    * @param _interval number of seconds that need to pass between payment transactions.\n    * @param _maxRepeats maximum instances a payment can be executed.\n    * @param _reference string detailing payment reason\n    */\n    function newPayment(\n        ERC20 _token,\n        address _receiver,\n        uint256 _amount,\n        uint64 _initialPaymentTime,\n        uint64 _interval,\n        uint64 _maxRepeats,\n        string _reference\n    ) authP(CREATE_PAYMENTS_ROLE, arr(address(_token), _receiver, _amount, _interval, _maxRepeats)) transitionsPeriod external returns (uint256 paymentId)\n    {\n\n        require(settings.budgets[_token] > 0 || !settings.hasBudget[_token]); // Token must have been added to budget\n\n        // Avoid saving payment data for 1 time immediate payments\n        if (_initialPaymentTime <= getTimestamp() && _maxRepeats == 1) {\n            _makePaymentTransaction(\n                _token,\n                _receiver,\n                _amount,\n                0   // unrelated to any payment id, it isn't created\n            );\n            return;\n        }\n\n        paymentId = payments.length++;\n\n        Payment storage payment = payments[paymentId];\n        payment.token = _token;\n        payment.receiver = _receiver;\n        payment.amount = _amount;\n        payment.initialPaymentTime = _initialPaymentTime;\n        payment.interval = _interval;\n        payment.maxRepeats = _maxRepeats;\n        payment.reference = _reference;\n        payment.createdBy = msg.sender;\n\n        NewPayment(paymentId, _receiver, _maxRepeats);\n\n        if (nextPaymentTime(paymentId) <= getTimestamp())\n            _executePayment(paymentId);\n    }\n\n    /**\n    * @notice Change period duration to `_duration`. Will be effective for next accounting period.\n    * @param _periodDuration Duration in seconds for accounting periods\n    */\n    function setPeriodDuration(uint64 _periodDuration) authP(CHANGE_PERIOD_ROLE, arr(uint256(_periodDuration), uint256(settings.periodDuration))) transitionsPeriod external {\n        require(_periodDuration > 1);\n        settings.periodDuration = _periodDuration;\n        ChangePeriodDuration(_periodDuration);\n    }\n\n    /**\n    * @notice Set budget for `_token` to `_amount`. Effective to current accounting period.\n    * @param _token Address for token\n    * @param _amount New budget amount\n    */\n    function setBudget(ERC20 _token, uint256 _amount) authP(CHANGE_BUDGETS_ROLE, arr(address(_token), _amount, settings.budgets[_token])) transitionsPeriod external {\n        settings.budgets[_token] = _amount;\n        if (!settings.hasBudget[_token]) {\n            settings.hasBudget[_token] = true;\n        }\n        SetBudget(_token, _amount, true);\n    }\n\n    /**\n    * @notice Remove budget for `_token`. Will be able to spend entire balance.\n    * @param _token Address for token\n    */\n    function removeBudget(ERC20 _token) authP(CHANGE_BUDGETS_ROLE, arr(address(_token), uint256(0), settings.budgets[_token])) transitionsPeriod external {\n        settings.hasBudget[_token] = false;\n        SetBudget(_token, 0, false);\n    }\n\n    /**\n    * @dev Withdraws any payment (requires certain status)\n    * @notice Trigger pending withdraw for `_paymentId`\n    * @param _paymentId Identifier for payment\n    */\n    function executePayment(uint256 _paymentId) authP(EXECUTE_PAYMENTS_ROLE, arr(_paymentId)) external {\n        require(nextPaymentTime(_paymentId) <= getTimestamp());\n\n        _executePayment(_paymentId);\n    }\n\n    /**\n    * @dev Always allows receiver of a payment to trigger execution\n    * @notice Trigger pending withdraw for `_paymentId`\n    * @param _paymentId Identifier for payment\n    */\n    function receiverExecutePayment(uint256 _paymentId) external {\n        require(nextPaymentTime(_paymentId) <= getTimestamp());\n        require(payments[_paymentId].receiver == msg.sender);\n\n        _executePayment(_paymentId);\n    }\n\n    /**\n    * @notice Sets payment `_paymentId` as `_disabled ? 'disabled' : 'enabled'`\n    * @param _paymentId Identifier for payment\n    * @param _disabled Whether it will be disabled or enabled\n    */\n    function setPaymentDisabled(uint256 _paymentId, bool _disabled) authP(DISABLE_PAYMENTS_ROLE, arr(_paymentId)) external {\n        payments[_paymentId].disabled = _disabled;\n        ChangePaymentState(_paymentId, _disabled);\n    }\n\n    /**\n     * @dev Allows make a simple payment from this contract to Vault,\n            to avoid locked tokens in contract forever.\n            This contract should never receive tokens with a simple transfer call,\n            but in case it happens, this function allows to recover them.\n     * @notice Send tokens to Vault\n     * @param _token Token whose balance is going to be transferred.\n     */\n    function depositToVault(address _token) public {\n        ERC20 token = ERC20(_token);\n        uint256 value = token.balanceOf(this);\n        require(value > 0);\n\n        _recordIncomingTransaction(\n            token,\n            this,\n            value,\n            \"Deposit to Vault\"\n        );\n        require(token.transfer(address(vault), value));\n    }\n\n    /**\n    * @dev Transitions accounting periods if needed. For preventing OOG attacks,\n           a TTL param is provided. If more that TTL periods need to be transitioned,\n           it will return false.\n    * @notice Transition accounting period if needed\n    * @param _ttl Maximum periods that can be transitioned\n    * @return success boolean indicating whether the accounting period is the correct one (if false, TTL was surpased and another call is needed)\n    */\n    function tryTransitionAccountingPeriod(uint256 _ttl) public returns (bool success) {\n        Period storage currentPeriod = periods[currentPeriodId()];\n        if (getTimestamp() <= currentPeriod.endTime)\n            return true; // transition not needed yet\n\n        // Transitioning period\n\n        // If there were any transactions in period, record which was the last\n        // In case 0 transactions occured, first and last tx id will be 0\n        if (currentPeriod.firstTransactionId != 0)\n            currentPeriod.lastTransactionId = transactions.length - 1;\n\n        // new period starts at end time + 1\n        Period storage newPeriod = _newPeriod(currentPeriod.endTime.add(1));\n\n        // In case multiple periods have to be transitioned at once\n        if (getTimestamp() > newPeriod.endTime) {\n            if (_ttl == 0)\n                return false; // if over TTL, return false indicating it didn't fully transition\n\n            return tryTransitionAccountingPeriod(_ttl.sub(1));\n        }\n\n        return true;\n    }\n\n    // consts\n\n    function getPayment(uint256 _paymentId) public view returns (ERC20 token, address receiver, uint256 amount, uint64 initialPaymentTime, uint64 interval, uint64 maxRepeats, string reference, bool disabled, uint256 repeats, address createdBy) {\n        Payment storage payment = payments[_paymentId];\n\n        token = payment.token;\n        receiver = payment.receiver;\n        amount = payment.amount;\n        initialPaymentTime = payment.initialPaymentTime;\n        interval = payment.interval;\n        maxRepeats = payment.maxRepeats;\n        repeats = payment.repeats;\n        disabled = payment.disabled;\n        reference = payment.reference;\n        createdBy = payment.createdBy;\n    }\n\n    function getTransaction(uint256 _transactionId) public view returns (uint256 periodId, uint256 amount, uint256 paymentId, ERC20 token, address entity, bool isIncoming, uint64 date, string reference) {\n        Transaction storage transaction = transactions[_transactionId];\n\n        token = transaction.token;\n        entity = transaction.entity;\n        isIncoming = transaction.isIncoming;\n        date = transaction.date;\n        periodId = transaction.periodId;\n        amount = transaction.amount;\n        paymentId = transaction.paymentId;\n        reference = transaction.reference;\n    }\n\n    function getPeriod(uint256 _periodId) public view returns (bool isCurrent, uint64 startTime, uint64 endTime, uint256 firstTransactionId, uint256 lastTransactionId) {\n        Period storage period = periods[_periodId];\n\n        isCurrent = currentPeriodId() == _periodId;\n\n        startTime = period.startTime;\n        endTime = period.endTime;\n        firstTransactionId = period.firstTransactionId;\n        lastTransactionId = period.lastTransactionId;\n    }\n\n    function getPeriodTokenStatement(uint256 _periodId, address _token) public view returns (uint256 expenses, uint256 income) {\n        TokenStatement storage tokenStatement = periods[_periodId].tokenStatement[_token];\n        return (tokenStatement.expenses, tokenStatement.income);\n    }\n\n    function nextPaymentTime(uint256 _paymentId) public view returns (uint64) {\n        Payment memory payment = payments[_paymentId];\n\n        if (payment.repeats >= payment.maxRepeats)\n            return MAX_UINT64; // re-executes in some billions of years time... should not need to worry\n\n        // split in multiple lines to circunvent linter warning\n        uint256 increase = uint256(payment.repeats).mul(uint256(payment.interval));\n        uint256 nextPayment = uint256(payment.initialPaymentTime).add(increase);\n        return uint64(nextPayment);\n    }\n\n    function getPeriodDuration() public view returns (uint64 periodDuration) {\n        return settings.periodDuration;\n    }\n\n    function getBudget(address _token) transitionsPeriod public returns (uint256 budget, bool hasBudget, uint256 remainingBudget) {\n        budget = settings.budgets[_token];\n        hasBudget = settings.hasBudget[_token];\n        remainingBudget = _getRemainingBudget(_token);\n    }\n\n    function currentPeriodId() public view returns (uint256) {\n        return periods.length - 1;\n    }\n\n    // internal fns\n\n    function _newPeriod(uint64 _startTime) internal returns (Period storage) {\n        uint256 newPeriodId = periods.length++;\n\n        Period storage period = periods[newPeriodId];\n        period.startTime = _startTime;\n        // endTime = startTime + periodDuration - 1\n        period.endTime = _startTime.add(settings.periodDuration).sub(1);\n\n        NewPeriod(newPeriodId, period.startTime, period.endTime);\n\n        return period;\n    }\n\n    function _executePayment(uint256 _paymentId) transitionsPeriod internal {\n        Payment storage payment = payments[_paymentId];\n        require(!payment.disabled);\n\n        uint64 payed = 0;\n        while (nextPaymentTime(_paymentId) <= getTimestamp() && payed < MAX_PAYMENTS_PER_TX) {\n            if (!_canMakePayment(payment.token, payment.amount)) {\n                PaymentFailure(_paymentId);\n                return;\n            }\n\n            payment.repeats += 1;\n            payed += 1;\n\n            _makePaymentTransaction(\n                payment.token,\n                payment.receiver,\n                payment.amount,\n                _paymentId\n            );\n        }\n    }\n\n    function _makePaymentTransaction(\n        ERC20 _token,\n        address _receiver,\n        uint256 _amount,\n        uint256 _paymentId\n        ) internal\n    {\n        require(_getRemainingBudget(_token) >= _amount);\n        _recordTransaction(\n            false,\n            _token,\n            _receiver,\n            _amount,\n            _paymentId,\n            \"\"\n        );\n\n        if (address(_token) != address(etherToken)) {\n            vault.transferTokens(_token, _receiver, _amount);\n        } else {\n            vault.transferTokens(_token, address(this), _amount); // transfer to finance app\n            etherToken.withdraw(_receiver, _amount); // withdraw ether to receiver\n        }\n    }\n\n    function _recordIncomingTransaction(\n        address _token,\n        address _sender,\n        uint256 _amount,\n        string _reference\n        ) internal\n    {\n        _recordTransaction(\n            true, // incoming transaction\n            ERC20(_token),\n            _sender,\n            _amount,\n            0, // unrelated to any existing payment\n            _reference\n        );\n    }\n\n    function _recordTransaction(\n        bool _incoming,\n        ERC20 _token,\n        address _entity,\n        uint256 _amount,\n        uint256 _paymentId,\n        string _reference\n        ) internal\n    {\n        uint256 periodId = currentPeriodId();\n        TokenStatement storage tokenStatement = periods[periodId].tokenStatement[_token];\n        if (_incoming) {\n            tokenStatement.income = tokenStatement.income.add(_amount);\n        } else {\n            tokenStatement.expenses = tokenStatement.expenses.add(_amount);\n        }\n\n        uint256 transactionId = transactions.length++;\n        Transaction storage transaction = transactions[transactionId];\n        transaction.periodId = periodId;\n        transaction.amount = _amount;\n        transaction.paymentId = _paymentId;\n        transaction.isIncoming = _incoming;\n        transaction.token = _token;\n        transaction.entity = _entity;\n        transaction.date = uint64(getTimestamp());\n        transaction.reference = _reference;\n\n        Period storage period = periods[periodId];\n        if (period.firstTransactionId == 0)\n            period.firstTransactionId = transactionId;\n\n        NewTransaction(transactionId, _incoming, _entity);\n    }\n\n    function _canMakePayment(ERC20 _token, uint256 _amount) internal view returns (bool) {\n        return _getRemainingBudget(_token) >= _amount && _token.balanceOf(address(vault)) >= _amount;\n    }\n\n    function _getRemainingBudget(address _token) internal view returns (uint256) {\n        if (!settings.hasBudget[_token])\n            return MAX_UINT;\n\n        uint256 spent = periods[currentPeriodId()].tokenStatement[_token].expenses;\n\n        // A budget decrease can cause the spent amount to be greater than period budget\n        // If so, return 0 to not allow more spending during period\n        if (spent >= settings.budgets[_token])\n            return 0;\n\n        return settings.budgets[_token].sub(spent);\n    }\n\n    function getTimestamp() internal view returns (uint256) { return now; }\n}\n",
  "sourcePath": "@aragon/apps-finance/contracts/Finance.sol",
  "ast": {
    "attributes": {
      "absolutePath": "@aragon/apps-finance/contracts/Finance.sol",
      "exportedSymbols": {
        "Finance": [
          2555
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.4",
            ".18"
          ]
        },
        "id": 937,
        "name": "PragmaDirective",
        "src": "0:23:5"
      },
      {
        "attributes": {
          "SourceUnit": 6969,
          "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
          "file": "@aragon/os/contracts/apps/AragonApp.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 938,
        "name": "ImportDirective",
        "src": "25:49:5"
      },
      {
        "attributes": {
          "SourceUnit": 7196,
          "absolutePath": "@aragon/os/contracts/common/EtherToken.sol",
          "file": "@aragon/os/contracts/common/EtherToken.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 939,
        "name": "ImportDirective",
        "src": "75:52:5"
      },
      {
        "attributes": {
          "SourceUnit": 10715,
          "absolutePath": "@aragon/os/contracts/lib/erc677/ERC677Receiver.sol",
          "file": "@aragon/os/contracts/lib/erc677/ERC677Receiver.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 940,
        "name": "ImportDirective",
        "src": "128:60:5"
      },
      {
        "attributes": {
          "SourceUnit": 12301,
          "absolutePath": "@aragon/os/contracts/lib/zeppelin/token/ERC20.sol",
          "file": "@aragon/os/contracts/lib/zeppelin/token/ERC20.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 941,
        "name": "ImportDirective",
        "src": "190:59:5"
      },
      {
        "attributes": {
          "SourceUnit": 12067,
          "absolutePath": "@aragon/os/contracts/lib/zeppelin/math/SafeMath.sol",
          "file": "@aragon/os/contracts/lib/zeppelin/math/SafeMath.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 942,
        "name": "ImportDirective",
        "src": "250:61:5"
      },
      {
        "attributes": {
          "SourceUnit": 12162,
          "absolutePath": "@aragon/os/contracts/lib/zeppelin/math/SafeMath64.sol",
          "file": "@aragon/os/contracts/lib/zeppelin/math/SafeMath64.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 943,
        "name": "ImportDirective",
        "src": "312:63:5"
      },
      {
        "attributes": {
          "SourceUnit": 3520,
          "absolutePath": "@aragon/apps-vault/contracts/Vault.sol",
          "file": "@aragon/apps-vault/contracts/Vault.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 944,
        "name": "ImportDirective",
        "src": "377:48:5"
      },
      {
        "attributes": {
          "SourceUnit": 11972,
          "absolutePath": "@aragon/os/contracts/lib/misc/Migrations.sol",
          "file": "@aragon/os/contracts/lib/misc/Migrations.sol",
          "scope": 2556,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 945,
        "name": "ImportDirective",
        "src": "427:54:5"
      },
      {
        "attributes": {
          "contractDependencies": [
            5905,
            6870,
            6968,
            7261,
            7846,
            7877,
            10714
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2555,
            10714,
            6968,
            7846,
            7877,
            5905,
            7261,
            6870
          ],
          "name": "Finance",
          "scope": 2556
        },
        "children": [
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "AragonApp",
                  "referencedDeclaration": 6968,
                  "type": "contract AragonApp"
                },
                "id": 946,
                "name": "UserDefinedTypeName",
                "src": "504:9:5"
              }
            ],
            "id": 947,
            "name": "InheritanceSpecifier",
            "src": "504:9:5"
          },
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ERC677Receiver",
                  "referencedDeclaration": 10714,
                  "type": "contract ERC677Receiver"
                },
                "id": 948,
                "name": "UserDefinedTypeName",
                "src": "515:14:5"
              }
            ],
            "id": 949,
            "name": "InheritanceSpecifier",
            "src": "515:14:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 12066,
                  "type": "library SafeMath"
                },
                "id": 950,
                "name": "UserDefinedTypeName",
                "src": "542:8:5"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 951,
                "name": "ElementaryTypeName",
                "src": "555:7:5"
              }
            ],
            "id": 952,
            "name": "UsingForDirective",
            "src": "536:27:5"
          },
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath64",
                  "referencedDeclaration": 12161,
                  "type": "library SafeMath64"
                },
                "id": 953,
                "name": "UserDefinedTypeName",
                "src": "574:10:5"
              },
              {
                "attributes": {
                  "name": "uint64",
                  "type": "uint64"
                },
                "id": 954,
                "name": "ElementaryTypeName",
                "src": "589:6:5"
              }
            ],
            "id": 955,
            "name": "UsingForDirective",
            "src": "568:28:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "MAX_PAYMENTS_PER_TX",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint64",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint64",
                  "type": "uint64"
                },
                "id": 956,
                "name": "ElementaryTypeName",
                "src": "602:6:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "3230",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 20",
                  "value": "20"
                },
                "id": 957,
                "name": "Literal",
                "src": "647:2:5"
              }
            ],
            "id": 958,
            "name": "VariableDeclaration",
            "src": "602:47:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "MAX_PERIOD_TRANSITIONS_PER_TX",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint64",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint64",
                  "type": "uint64"
                },
                "id": 959,
                "name": "ElementaryTypeName",
                "src": "655:6:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "3130",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 10",
                  "value": "10"
                },
                "id": 960,
                "name": "Literal",
                "src": "710:2:5"
              }
            ],
            "id": 961,
            "name": "VariableDeclaration",
            "src": "655:57:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "MAX_UINT64",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint64",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint64",
                  "type": "uint64"
                },
                "id": 962,
                "name": "ElementaryTypeName",
                "src": "718:6:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "uint64",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_-1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(uint64)",
                      "value": "uint64"
                    },
                    "id": 963,
                    "name": "ElementaryTypeNameExpression",
                    "src": "754:6:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "-",
                      "prefix": true,
                      "type": "int_const -1"
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "31",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 1",
                          "value": "1"
                        },
                        "id": 964,
                        "name": "Literal",
                        "src": "762:1:5"
                      }
                    ],
                    "id": 965,
                    "name": "UnaryOperation",
                    "src": "761:2:5"
                  }
                ],
                "id": 966,
                "name": "FunctionCall",
                "src": "754:10:5"
              }
            ],
            "id": 967,
            "name": "VariableDeclaration",
            "src": "718:46:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "MAX_UINT",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint256",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 968,
                "name": "ElementaryTypeName",
                "src": "770:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "uint256",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_-1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(uint256)",
                      "value": "uint256"
                    },
                    "id": 969,
                    "name": "ElementaryTypeNameExpression",
                    "src": "805:7:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "-",
                      "prefix": true,
                      "type": "int_const -1"
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "31",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 1",
                          "value": "1"
                        },
                        "id": 970,
                        "name": "Literal",
                        "src": "814:1:5"
                      }
                    ],
                    "id": 971,
                    "name": "UnaryOperation",
                    "src": "813:2:5"
                  }
                ],
                "id": 972,
                "name": "FunctionCall",
                "src": "805:11:5"
              }
            ],
            "id": 973,
            "name": "VariableDeclaration",
            "src": "770:46:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "CREATE_PAYMENTS_ROLE",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 974,
                "name": "ElementaryTypeName",
                "src": "823:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5de467a460382d13defdc02aacddc9c7d6605d6d4e0b8bd2f70732cae8ea17bc",
                          "typeString": "literal_string \"CREATE_PAYMENTS_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 975,
                    "name": "Identifier",
                    "src": "870:9:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "4352454154455f5041594d454e54535f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"CREATE_PAYMENTS_ROLE\"",
                      "value": "CREATE_PAYMENTS_ROLE"
                    },
                    "id": 976,
                    "name": "Literal",
                    "src": "880:22:5"
                  }
                ],
                "id": 977,
                "name": "FunctionCall",
                "src": "870:33:5"
              }
            ],
            "id": 978,
            "name": "VariableDeclaration",
            "src": "823:80:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "CHANGE_PERIOD_ROLE",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 979,
                "name": "ElementaryTypeName",
                "src": "909:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_d35e458bacdd5343c2f050f574554b2f417a8ea38d6a9a65ce2225dbe8bb9a9d",
                          "typeString": "literal_string \"CHANGE_PERIOD_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 980,
                    "name": "Identifier",
                    "src": "954:9:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "4348414e47455f504552494f445f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"CHANGE_PERIOD_ROLE\"",
                      "value": "CHANGE_PERIOD_ROLE"
                    },
                    "id": 981,
                    "name": "Literal",
                    "src": "964:20:5"
                  }
                ],
                "id": 982,
                "name": "FunctionCall",
                "src": "954:31:5"
              }
            ],
            "id": 983,
            "name": "VariableDeclaration",
            "src": "909:76:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "CHANGE_BUDGETS_ROLE",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 984,
                "name": "ElementaryTypeName",
                "src": "991:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_d79730e82bfef7d2f9639b9d10bf37ebb662b22ae2211502a00bdf7b2cc3a23a",
                          "typeString": "literal_string \"CHANGE_BUDGETS_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 985,
                    "name": "Identifier",
                    "src": "1037:9:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "4348414e47455f425544474554535f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"CHANGE_BUDGETS_ROLE\"",
                      "value": "CHANGE_BUDGETS_ROLE"
                    },
                    "id": 986,
                    "name": "Literal",
                    "src": "1047:21:5"
                  }
                ],
                "id": 987,
                "name": "FunctionCall",
                "src": "1037:32:5"
              }
            ],
            "id": 988,
            "name": "VariableDeclaration",
            "src": "991:78:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "EXECUTE_PAYMENTS_ROLE",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 989,
                "name": "ElementaryTypeName",
                "src": "1075:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_563165d3eae48bcb0a092543ca070d989169c98357e9a1b324ec5da44bab75fd",
                          "typeString": "literal_string \"EXECUTE_PAYMENTS_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 990,
                    "name": "Identifier",
                    "src": "1123:9:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "455845435554455f5041594d454e54535f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"EXECUTE_PAYMENTS_ROLE\"",
                      "value": "EXECUTE_PAYMENTS_ROLE"
                    },
                    "id": 991,
                    "name": "Literal",
                    "src": "1133:23:5"
                  }
                ],
                "id": 992,
                "name": "FunctionCall",
                "src": "1123:34:5"
              }
            ],
            "id": 993,
            "name": "VariableDeclaration",
            "src": "1075:82:5"
          },
          {
            "attributes": {
              "constant": true,
              "name": "DISABLE_PAYMENTS_ROLE",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 994,
                "name": "ElementaryTypeName",
                "src": "1163:7:5"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_8d7d2f9e236b86ec9fcb40d8d87dac984e77769036b3c133886929e59c704339",
                          "typeString": "literal_string \"DISABLE_PAYMENTS_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 995,
                    "name": "Identifier",
                    "src": "1211:9:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "44495341424c455f5041594d454e54535f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"DISABLE_PAYMENTS_ROLE\"",
                      "value": "DISABLE_PAYMENTS_ROLE"
                    },
                    "id": 996,
                    "name": "Literal",
                    "src": "1221:23:5"
                  }
                ],
                "id": 997,
                "name": "FunctionCall",
                "src": "1211:34:5"
              }
            ],
            "id": 998,
            "name": "VariableDeclaration",
            "src": "1163:82:5"
          },
          {
            "attributes": {
              "canonicalName": "Finance.Payment",
              "name": "Payment",
              "scope": 2555,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "token",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract ERC20",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "ERC20",
                      "referencedDeclaration": 12300,
                      "type": "contract ERC20"
                    },
                    "id": 999,
                    "name": "UserDefinedTypeName",
                    "src": "1312:5:5"
                  }
                ],
                "id": 1000,
                "name": "VariableDeclaration",
                "src": "1312:11:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "receiver",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 1001,
                    "name": "ElementaryTypeName",
                    "src": "1333:7:5"
                  }
                ],
                "id": 1002,
                "name": "VariableDeclaration",
                "src": "1333:16:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "createdBy",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 1003,
                    "name": "ElementaryTypeName",
                    "src": "1359:7:5"
                  }
                ],
                "id": 1004,
                "name": "VariableDeclaration",
                "src": "1359:17:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "disabled",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bool",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 1005,
                    "name": "ElementaryTypeName",
                    "src": "1386:4:5"
                  }
                ],
                "id": 1006,
                "name": "VariableDeclaration",
                "src": "1386:13:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "initialPaymentTime",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1007,
                    "name": "ElementaryTypeName",
                    "src": "1409:6:5"
                  }
                ],
                "id": 1008,
                "name": "VariableDeclaration",
                "src": "1409:25:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "interval",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1009,
                    "name": "ElementaryTypeName",
                    "src": "1444:6:5"
                  }
                ],
                "id": 1010,
                "name": "VariableDeclaration",
                "src": "1444:15:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "maxRepeats",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1011,
                    "name": "ElementaryTypeName",
                    "src": "1469:6:5"
                  }
                ],
                "id": 1012,
                "name": "VariableDeclaration",
                "src": "1469:17:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "repeats",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1013,
                    "name": "ElementaryTypeName",
                    "src": "1496:6:5"
                  }
                ],
                "id": 1014,
                "name": "VariableDeclaration",
                "src": "1496:14:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "amount",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1015,
                    "name": "ElementaryTypeName",
                    "src": "1520:7:5"
                  }
                ],
                "id": 1016,
                "name": "VariableDeclaration",
                "src": "1520:14:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "reference",
                  "scope": 1019,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "string storage pointer",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "string",
                      "type": "string storage pointer"
                    },
                    "id": 1017,
                    "name": "ElementaryTypeName",
                    "src": "1544:6:5"
                  }
                ],
                "id": 1018,
                "name": "VariableDeclaration",
                "src": "1544:16:5"
              }
            ],
            "id": 1019,
            "name": "StructDefinition",
            "src": "1287:280:5"
          },
          {
            "attributes": {
              "canonicalName": "Finance.Transaction",
              "name": "Transaction",
              "scope": 2555,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "token",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "contract ERC20",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "ERC20",
                      "referencedDeclaration": 12300,
                      "type": "contract ERC20"
                    },
                    "id": 1020,
                    "name": "UserDefinedTypeName",
                    "src": "1637:5:5"
                  }
                ],
                "id": 1021,
                "name": "VariableDeclaration",
                "src": "1637:11:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "entity",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 1022,
                    "name": "ElementaryTypeName",
                    "src": "1658:7:5"
                  }
                ],
                "id": 1023,
                "name": "VariableDeclaration",
                "src": "1658:14:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "isIncoming",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bool",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 1024,
                    "name": "ElementaryTypeName",
                    "src": "1682:4:5"
                  }
                ],
                "id": 1025,
                "name": "VariableDeclaration",
                "src": "1682:15:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "date",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1026,
                    "name": "ElementaryTypeName",
                    "src": "1707:6:5"
                  }
                ],
                "id": 1027,
                "name": "VariableDeclaration",
                "src": "1707:11:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "periodId",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1028,
                    "name": "ElementaryTypeName",
                    "src": "1728:7:5"
                  }
                ],
                "id": 1029,
                "name": "VariableDeclaration",
                "src": "1728:16:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "amount",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1030,
                    "name": "ElementaryTypeName",
                    "src": "1754:7:5"
                  }
                ],
                "id": 1031,
                "name": "VariableDeclaration",
                "src": "1754:14:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "paymentId",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1032,
                    "name": "ElementaryTypeName",
                    "src": "1778:7:5"
                  }
                ],
                "id": 1033,
                "name": "VariableDeclaration",
                "src": "1778:17:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "reference",
                  "scope": 1036,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "string storage pointer",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "string",
                      "type": "string storage pointer"
                    },
                    "id": 1034,
                    "name": "ElementaryTypeName",
                    "src": "1805:6:5"
                  }
                ],
                "id": 1035,
                "name": "VariableDeclaration",
                "src": "1805:16:5"
              }
            ],
            "id": 1036,
            "name": "StructDefinition",
            "src": "1608:220:5"
          },
          {
            "attributes": {
              "canonicalName": "Finance.TokenStatement",
              "name": "TokenStatement",
              "scope": 2555,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "expenses",
                  "scope": 1041,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1037,
                    "name": "ElementaryTypeName",
                    "src": "1866:7:5"
                  }
                ],
                "id": 1038,
                "name": "VariableDeclaration",
                "src": "1866:16:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "income",
                  "scope": 1041,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1039,
                    "name": "ElementaryTypeName",
                    "src": "1892:7:5"
                  }
                ],
                "id": 1040,
                "name": "VariableDeclaration",
                "src": "1892:14:5"
              }
            ],
            "id": 1041,
            "name": "StructDefinition",
            "src": "1834:79:5"
          },
          {
            "attributes": {
              "canonicalName": "Finance.Period",
              "name": "Period",
              "scope": 2555,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "startTime",
                  "scope": 1054,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1042,
                    "name": "ElementaryTypeName",
                    "src": "1943:6:5"
                  }
                ],
                "id": 1043,
                "name": "VariableDeclaration",
                "src": "1943:16:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "endTime",
                  "scope": 1054,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1044,
                    "name": "ElementaryTypeName",
                    "src": "1969:6:5"
                  }
                ],
                "id": 1045,
                "name": "VariableDeclaration",
                "src": "1969:14:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "firstTransactionId",
                  "scope": 1054,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1046,
                    "name": "ElementaryTypeName",
                    "src": "1993:7:5"
                  }
                ],
                "id": 1047,
                "name": "VariableDeclaration",
                "src": "1993:26:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "lastTransactionId",
                  "scope": 1054,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1048,
                    "name": "ElementaryTypeName",
                    "src": "2029:7:5"
                  }
                ],
                "id": 1049,
                "name": "VariableDeclaration",
                "src": "2029:25:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "tokenStatement",
                  "scope": 1054,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => struct Finance.TokenStatement storage ref)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => struct Finance.TokenStatement storage ref)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1050,
                        "name": "ElementaryTypeName",
                        "src": "2074:7:5"
                      },
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "TokenStatement",
                          "referencedDeclaration": 1041,
                          "type": "struct Finance.TokenStatement storage pointer"
                        },
                        "id": 1051,
                        "name": "UserDefinedTypeName",
                        "src": "2085:14:5"
                      }
                    ],
                    "id": 1052,
                    "name": "Mapping",
                    "src": "2065:35:5"
                  }
                ],
                "id": 1053,
                "name": "VariableDeclaration",
                "src": "2065:50:5"
              }
            ],
            "id": 1054,
            "name": "StructDefinition",
            "src": "1919:203:5"
          },
          {
            "attributes": {
              "canonicalName": "Finance.Settings",
              "name": "Settings",
              "scope": 2555,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "periodDuration",
                  "scope": 1065,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint64",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint64",
                      "type": "uint64"
                    },
                    "id": 1055,
                    "name": "ElementaryTypeName",
                    "src": "2154:6:5"
                  }
                ],
                "id": 1056,
                "name": "VariableDeclaration",
                "src": "2154:21:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "budgets",
                  "scope": 1065,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => uint256)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => uint256)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1057,
                        "name": "ElementaryTypeName",
                        "src": "2194:7:5"
                      },
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1058,
                        "name": "ElementaryTypeName",
                        "src": "2205:7:5"
                      }
                    ],
                    "id": 1059,
                    "name": "Mapping",
                    "src": "2185:28:5"
                  }
                ],
                "id": 1060,
                "name": "VariableDeclaration",
                "src": "2185:36:5"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "hasBudget",
                  "scope": 1065,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "mapping(address => bool)",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "type": "mapping(address => bool)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1061,
                        "name": "ElementaryTypeName",
                        "src": "2240:7:5"
                      },
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1062,
                        "name": "ElementaryTypeName",
                        "src": "2251:4:5"
                      }
                    ],
                    "id": 1063,
                    "name": "Mapping",
                    "src": "2231:25:5"
                  }
                ],
                "id": 1064,
                "name": "VariableDeclaration",
                "src": "2231:35:5"
              }
            ],
            "id": 1065,
            "name": "StructDefinition",
            "src": "2128:145:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "vault",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract Vault",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Vault",
                  "referencedDeclaration": 3519,
                  "type": "contract Vault"
                },
                "id": 1066,
                "name": "UserDefinedTypeName",
                "src": "2279:5:5"
              }
            ],
            "id": 1067,
            "name": "VariableDeclaration",
            "src": "2279:18:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "etherToken",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract EtherToken",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "EtherToken",
                  "referencedDeclaration": 7195,
                  "type": "contract EtherToken"
                },
                "id": 1068,
                "name": "UserDefinedTypeName",
                "src": "2303:10:5"
              }
            ],
            "id": 1069,
            "name": "VariableDeclaration",
            "src": "2303:28:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "payments",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct Finance.Payment storage ref[] storage ref",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "length": null,
                  "type": "struct Finance.Payment storage ref[] storage pointer"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "Payment",
                      "referencedDeclaration": 1019,
                      "type": "struct Finance.Payment storage pointer"
                    },
                    "id": 1070,
                    "name": "UserDefinedTypeName",
                    "src": "2338:7:5"
                  }
                ],
                "id": 1071,
                "name": "ArrayTypeName",
                "src": "2338:9:5"
              }
            ],
            "id": 1072,
            "name": "VariableDeclaration",
            "src": "2338:18:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "transactions",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct Finance.Transaction storage ref[] storage ref",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "length": null,
                  "type": "struct Finance.Transaction storage ref[] storage pointer"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "Transaction",
                      "referencedDeclaration": 1036,
                      "type": "struct Finance.Transaction storage pointer"
                    },
                    "id": 1073,
                    "name": "UserDefinedTypeName",
                    "src": "2382:11:5"
                  }
                ],
                "id": 1074,
                "name": "ArrayTypeName",
                "src": "2382:13:5"
              }
            ],
            "id": 1075,
            "name": "VariableDeclaration",
            "src": "2382:26:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "periods",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct Finance.Period storage ref[] storage ref",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "length": null,
                  "type": "struct Finance.Period storage ref[] storage pointer"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "Period",
                      "referencedDeclaration": 1054,
                      "type": "struct Finance.Period storage pointer"
                    },
                    "id": 1076,
                    "name": "UserDefinedTypeName",
                    "src": "2434:6:5"
                  }
                ],
                "id": 1077,
                "name": "ArrayTypeName",
                "src": "2434:8:5"
              }
            ],
            "id": 1078,
            "name": "VariableDeclaration",
            "src": "2434:16:5"
          },
          {
            "attributes": {
              "constant": false,
              "name": "settings",
              "scope": 2555,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct Finance.Settings storage ref",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Settings",
                  "referencedDeclaration": 1065,
                  "type": "struct Finance.Settings storage pointer"
                },
                "id": 1079,
                "name": "UserDefinedTypeName",
                "src": "2476:8:5"
              }
            ],
            "id": 1080,
            "name": "VariableDeclaration",
            "src": "2476:17:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "NewPeriod"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "periodId",
                      "scope": 1088,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1081,
                        "name": "ElementaryTypeName",
                        "src": "2516:7:5"
                      }
                    ],
                    "id": 1082,
                    "name": "VariableDeclaration",
                    "src": "2516:24:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "periodStarts",
                      "scope": 1088,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1083,
                        "name": "ElementaryTypeName",
                        "src": "2542:6:5"
                      }
                    ],
                    "id": 1084,
                    "name": "VariableDeclaration",
                    "src": "2542:19:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "periodEnds",
                      "scope": 1088,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1085,
                        "name": "ElementaryTypeName",
                        "src": "2563:6:5"
                      }
                    ],
                    "id": 1086,
                    "name": "VariableDeclaration",
                    "src": "2563:17:5"
                  }
                ],
                "id": 1087,
                "name": "ParameterList",
                "src": "2515:66:5"
              }
            ],
            "id": 1088,
            "name": "EventDefinition",
            "src": "2500:82:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "SetBudget"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "token",
                      "scope": 1096,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1089,
                        "name": "ElementaryTypeName",
                        "src": "2603:7:5"
                      }
                    ],
                    "id": 1090,
                    "name": "VariableDeclaration",
                    "src": "2603:21:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "amount",
                      "scope": 1096,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1091,
                        "name": "ElementaryTypeName",
                        "src": "2626:7:5"
                      }
                    ],
                    "id": 1092,
                    "name": "VariableDeclaration",
                    "src": "2626:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "hasBudget",
                      "scope": 1096,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1093,
                        "name": "ElementaryTypeName",
                        "src": "2642:4:5"
                      }
                    ],
                    "id": 1094,
                    "name": "VariableDeclaration",
                    "src": "2642:14:5"
                  }
                ],
                "id": 1095,
                "name": "ParameterList",
                "src": "2602:55:5"
              }
            ],
            "id": 1096,
            "name": "EventDefinition",
            "src": "2587:71:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "NewPayment"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "paymentId",
                      "scope": 1104,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1097,
                        "name": "ElementaryTypeName",
                        "src": "2680:7:5"
                      }
                    ],
                    "id": 1098,
                    "name": "VariableDeclaration",
                    "src": "2680:25:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "recipient",
                      "scope": 1104,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1099,
                        "name": "ElementaryTypeName",
                        "src": "2707:7:5"
                      }
                    ],
                    "id": 1100,
                    "name": "VariableDeclaration",
                    "src": "2707:25:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "maxRepeats",
                      "scope": 1104,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1101,
                        "name": "ElementaryTypeName",
                        "src": "2734:6:5"
                      }
                    ],
                    "id": 1102,
                    "name": "VariableDeclaration",
                    "src": "2734:17:5"
                  }
                ],
                "id": 1103,
                "name": "ParameterList",
                "src": "2679:73:5"
              }
            ],
            "id": 1104,
            "name": "EventDefinition",
            "src": "2663:90:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "NewTransaction"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "transactionId",
                      "scope": 1112,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1105,
                        "name": "ElementaryTypeName",
                        "src": "2779:7:5"
                      }
                    ],
                    "id": 1106,
                    "name": "VariableDeclaration",
                    "src": "2779:29:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "incoming",
                      "scope": 1112,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1107,
                        "name": "ElementaryTypeName",
                        "src": "2810:4:5"
                      }
                    ],
                    "id": 1108,
                    "name": "VariableDeclaration",
                    "src": "2810:13:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "entity",
                      "scope": 1112,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1109,
                        "name": "ElementaryTypeName",
                        "src": "2825:7:5"
                      }
                    ],
                    "id": 1110,
                    "name": "VariableDeclaration",
                    "src": "2825:22:5"
                  }
                ],
                "id": 1111,
                "name": "ParameterList",
                "src": "2778:70:5"
              }
            ],
            "id": 1112,
            "name": "EventDefinition",
            "src": "2758:91:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ChangePaymentState"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "paymentId",
                      "scope": 1118,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1113,
                        "name": "ElementaryTypeName",
                        "src": "2879:7:5"
                      }
                    ],
                    "id": 1114,
                    "name": "VariableDeclaration",
                    "src": "2879:25:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "disabled",
                      "scope": 1118,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1115,
                        "name": "ElementaryTypeName",
                        "src": "2906:4:5"
                      }
                    ],
                    "id": 1116,
                    "name": "VariableDeclaration",
                    "src": "2906:13:5"
                  }
                ],
                "id": 1117,
                "name": "ParameterList",
                "src": "2878:42:5"
              }
            ],
            "id": 1118,
            "name": "EventDefinition",
            "src": "2854:67:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ChangePeriodDuration"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "newDuration",
                      "scope": 1122,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1119,
                        "name": "ElementaryTypeName",
                        "src": "2953:6:5"
                      }
                    ],
                    "id": 1120,
                    "name": "VariableDeclaration",
                    "src": "2953:18:5"
                  }
                ],
                "id": 1121,
                "name": "ParameterList",
                "src": "2952:20:5"
              }
            ],
            "id": 1122,
            "name": "EventDefinition",
            "src": "2926:47:5"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "PaymentFailure"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "paymentId",
                      "scope": 1126,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1123,
                        "name": "ElementaryTypeName",
                        "src": "2999:7:5"
                      }
                    ],
                    "id": 1124,
                    "name": "VariableDeclaration",
                    "src": "2999:17:5"
                  }
                ],
                "id": 1125,
                "name": "ParameterList",
                "src": "2998:19:5"
              }
            ],
            "id": 1126,
            "name": "EventDefinition",
            "src": "2978:40:5"
          },
          {
            "attributes": {
              "name": "transitionsPeriod",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1127,
                "name": "ParameterList",
                "src": "3190:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1129
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "completeTransition",
                          "scope": 1140,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 1128,
                            "name": "ElementaryTypeName",
                            "src": "3200:4:5"
                          }
                        ],
                        "id": 1129,
                        "name": "VariableDeclaration",
                        "src": "3200:23:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1802,
                              "type": "function (uint256) returns (bool)",
                              "value": "tryTransitionAccountingPeriod"
                            },
                            "id": 1130,
                            "name": "Identifier",
                            "src": "3226:29:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 961,
                              "type": "uint64",
                              "value": "MAX_PERIOD_TRANSITIONS_PER_TX"
                            },
                            "id": 1131,
                            "name": "Identifier",
                            "src": "3256:29:5"
                          }
                        ],
                        "id": 1132,
                        "name": "FunctionCall",
                        "src": "3226:60:5"
                      }
                    ],
                    "id": 1133,
                    "name": "VariableDeclarationStatement",
                    "src": "3200:86:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1134,
                            "name": "Identifier",
                            "src": "3296:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1129,
                              "type": "bool",
                              "value": "completeTransition"
                            },
                            "id": 1135,
                            "name": "Identifier",
                            "src": "3304:18:5"
                          }
                        ],
                        "id": 1136,
                        "name": "FunctionCall",
                        "src": "3296:27:5"
                      }
                    ],
                    "id": 1137,
                    "name": "ExpressionStatement",
                    "src": "3296:27:5"
                  },
                  {
                    "id": 1138,
                    "name": "PlaceholderStatement",
                    "src": "3333:1:5"
                  }
                ],
                "id": 1139,
                "name": "Block",
                "src": "3190:151:5"
              }
            ],
            "id": 1140,
            "name": "ModifierDefinition",
            "src": "3163:178:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "escapeHatch",
              "payable": true,
              "scope": 2555,
              "stateMutability": "payable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1141,
                "name": "ParameterList",
                "src": "3662:2:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1142,
                "name": "ParameterList",
                "src": "3680:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_32290b46aa6418e63894c411b371c2283fd3994e887ddb2e8f18cd29e82650eb",
                                  "typeString": "literal_string \"Adding Funds\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "function (address,bytes memory) payable external",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": null,
                                  "type": "function (uint256) returns (function (address,bytes memory) payable external)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "wrapAndCall",
                                      "referencedDeclaration": 7064,
                                      "type": "function (address,bytes memory) payable external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1069,
                                          "type": "contract EtherToken",
                                          "value": "etherToken"
                                        },
                                        "id": 1143,
                                        "name": "Identifier",
                                        "src": "3727:10:5"
                                      }
                                    ],
                                    "id": 1146,
                                    "name": "MemberAccess",
                                    "src": "3727:22:5"
                                  }
                                ],
                                "id": 1147,
                                "name": "MemberAccess",
                                "src": "3727:28:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "balance",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12719,
                                      "type": "contract Finance",
                                      "value": "this"
                                    },
                                    "id": 1148,
                                    "name": "Identifier",
                                    "src": "3756:4:5"
                                  }
                                ],
                                "id": 1149,
                                "name": "MemberAccess",
                                "src": "3756:12:5"
                              }
                            ],
                            "id": 1150,
                            "name": "FunctionCall",
                            "src": "3727:42:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_Finance_$2555",
                                      "typeString": "contract Finance"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 1151,
                                "name": "ElementaryTypeNameExpression",
                                "src": "3770:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12719,
                                  "type": "contract Finance",
                                  "value": "this"
                                },
                                "id": 1152,
                                "name": "Identifier",
                                "src": "3778:4:5"
                              }
                            ],
                            "id": 1153,
                            "name": "FunctionCall",
                            "src": "3770:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "416464696e672046756e6473",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Adding Funds\"",
                              "value": "Adding Funds"
                            },
                            "id": 1154,
                            "name": "Literal",
                            "src": "3785:14:5"
                          }
                        ],
                        "id": 1155,
                        "name": "FunctionCall",
                        "src": "3727:73:5"
                      }
                    ],
                    "id": 1156,
                    "name": "ExpressionStatement",
                    "src": "3727:73:5"
                  }
                ],
                "id": 1157,
                "name": "Block",
                "src": "3680:127:5"
              }
            ],
            "id": 1158,
            "name": "FunctionDefinition",
            "src": "3642:165:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "initialize",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_vault",
                      "scope": 1219,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract Vault",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Vault",
                          "referencedDeclaration": 3519,
                          "type": "contract Vault"
                        },
                        "id": 1159,
                        "name": "UserDefinedTypeName",
                        "src": "4140:5:5"
                      }
                    ],
                    "id": 1160,
                    "name": "VariableDeclaration",
                    "src": "4140:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_etherToken",
                      "scope": 1219,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract EtherToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "EtherToken",
                          "referencedDeclaration": 7195,
                          "type": "contract EtherToken"
                        },
                        "id": 1161,
                        "name": "UserDefinedTypeName",
                        "src": "4154:10:5"
                      }
                    ],
                    "id": 1162,
                    "name": "VariableDeclaration",
                    "src": "4154:22:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodDuration",
                      "scope": 1219,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1163,
                        "name": "ElementaryTypeName",
                        "src": "4178:6:5"
                      }
                    ],
                    "id": 1164,
                    "name": "VariableDeclaration",
                    "src": "4178:22:5"
                  }
                ],
                "id": 1165,
                "name": "ParameterList",
                "src": "4139:62:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1168,
                "name": "ParameterList",
                "src": "4220:0:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 7232,
                      "type": "modifier ()",
                      "value": "onlyInit"
                    },
                    "id": 1166,
                    "name": "Identifier",
                    "src": "4211:8:5"
                  }
                ],
                "id": 1167,
                "name": "ModifierInvocation",
                "src": "4211:8:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7251,
                              "type": "function ()",
                              "value": "initialized"
                            },
                            "id": 1169,
                            "name": "Identifier",
                            "src": "4230:11:5"
                          }
                        ],
                        "id": 1170,
                        "name": "FunctionCall",
                        "src": "4230:13:5"
                      }
                    ],
                    "id": 1171,
                    "name": "ExpressionStatement",
                    "src": "4230:13:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1172,
                            "name": "Identifier",
                            "src": "4254:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1164,
                                  "type": "uint64",
                                  "value": "_periodDuration"
                                },
                                "id": 1173,
                                "name": "Identifier",
                                "src": "4262:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 1174,
                                "name": "Literal",
                                "src": "4280:1:5"
                              }
                            ],
                            "id": 1175,
                            "name": "BinaryOperation",
                            "src": "4262:19:5"
                          }
                        ],
                        "id": 1176,
                        "name": "FunctionCall",
                        "src": "4254:28:5"
                      }
                    ],
                    "id": 1177,
                    "name": "ExpressionStatement",
                    "src": "4254:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract Vault"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1067,
                              "type": "contract Vault",
                              "value": "vault"
                            },
                            "id": 1178,
                            "name": "Identifier",
                            "src": "4293:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1160,
                              "type": "contract Vault",
                              "value": "_vault"
                            },
                            "id": 1179,
                            "name": "Identifier",
                            "src": "4301:6:5"
                          }
                        ],
                        "id": 1180,
                        "name": "Assignment",
                        "src": "4293:14:5"
                      }
                    ],
                    "id": 1181,
                    "name": "ExpressionStatement",
                    "src": "4293:14:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract EtherToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1069,
                              "type": "contract EtherToken",
                              "value": "etherToken"
                            },
                            "id": 1182,
                            "name": "Identifier",
                            "src": "4317:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1162,
                              "type": "contract EtherToken",
                              "value": "_etherToken"
                            },
                            "id": 1183,
                            "name": "Identifier",
                            "src": "4330:11:5"
                          }
                        ],
                        "id": 1184,
                        "name": "Assignment",
                        "src": "4317:24:5"
                      }
                    ],
                    "id": 1185,
                    "name": "ExpressionStatement",
                    "src": "4317:24:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1072,
                                  "type": "struct Finance.Payment storage ref[] storage ref",
                                  "value": "payments"
                                },
                                "id": 1186,
                                "name": "Identifier",
                                "src": "4352:8:5"
                              }
                            ],
                            "id": 1188,
                            "name": "MemberAccess",
                            "src": "4352:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 1189,
                            "name": "Literal",
                            "src": "4371:1:5"
                          }
                        ],
                        "id": 1190,
                        "name": "Assignment",
                        "src": "4352:20:5"
                      }
                    ],
                    "id": 1191,
                    "name": "ExpressionStatement",
                    "src": "4352:20:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "disabled",
                              "referencedDeclaration": 1006,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Finance.Payment storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1072,
                                      "type": "struct Finance.Payment storage ref[] storage ref",
                                      "value": "payments"
                                    },
                                    "id": 1192,
                                    "name": "Identifier",
                                    "src": "4382:8:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1193,
                                    "name": "Literal",
                                    "src": "4391:1:5"
                                  }
                                ],
                                "id": 1194,
                                "name": "IndexAccess",
                                "src": "4382:11:5"
                              }
                            ],
                            "id": 1195,
                            "name": "MemberAccess",
                            "src": "4382:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 1196,
                            "name": "Literal",
                            "src": "4405:4:5"
                          }
                        ],
                        "id": 1197,
                        "name": "Assignment",
                        "src": "4382:27:5"
                      }
                    ],
                    "id": 1198,
                    "name": "ExpressionStatement",
                    "src": "4382:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "+=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1075,
                                  "type": "struct Finance.Transaction storage ref[] storage ref",
                                  "value": "transactions"
                                },
                                "id": 1199,
                                "name": "Identifier",
                                "src": "4420:12:5"
                              }
                            ],
                            "id": 1201,
                            "name": "MemberAccess",
                            "src": "4420:19:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 1202,
                            "name": "Literal",
                            "src": "4443:1:5"
                          }
                        ],
                        "id": 1203,
                        "name": "Assignment",
                        "src": "4420:24:5"
                      }
                    ],
                    "id": 1204,
                    "name": "ExpressionStatement",
                    "src": "4420:24:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "periodDuration",
                              "referencedDeclaration": 1056,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1080,
                                  "type": "struct Finance.Settings storage ref",
                                  "value": "settings"
                                },
                                "id": 1205,
                                "name": "Identifier",
                                "src": "4455:8:5"
                              }
                            ],
                            "id": 1207,
                            "name": "MemberAccess",
                            "src": "4455:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1164,
                              "type": "uint64",
                              "value": "_periodDuration"
                            },
                            "id": 1208,
                            "name": "Identifier",
                            "src": "4481:15:5"
                          }
                        ],
                        "id": 1209,
                        "name": "Assignment",
                        "src": "4455:41:5"
                      }
                    ],
                    "id": 1210,
                    "name": "ExpressionStatement",
                    "src": "4455:41:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "struct Finance.Period storage pointer",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2180,
                              "type": "function (uint64) returns (struct Finance.Period storage pointer)",
                              "value": "_newPeriod"
                            },
                            "id": 1211,
                            "name": "Identifier",
                            "src": "4506:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint64",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint64)",
                                  "value": "uint64"
                                },
                                "id": 1212,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4517:6:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 1213,
                                    "name": "Identifier",
                                    "src": "4524:12:5"
                                  }
                                ],
                                "id": 1214,
                                "name": "FunctionCall",
                                "src": "4524:14:5"
                              }
                            ],
                            "id": 1215,
                            "name": "FunctionCall",
                            "src": "4517:22:5"
                          }
                        ],
                        "id": 1216,
                        "name": "FunctionCall",
                        "src": "4506:34:5"
                      }
                    ],
                    "id": 1217,
                    "name": "ExpressionStatement",
                    "src": "4506:34:5"
                  }
                ],
                "id": 1218,
                "name": "Block",
                "src": "4220:327:5"
              }
            ],
            "id": 1219,
            "name": "FunctionDefinition",
            "src": "4120:427:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "deposit",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1251,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1220,
                        "name": "UserDefinedTypeName",
                        "src": "4801:5:5"
                      }
                    ],
                    "id": 1221,
                    "name": "VariableDeclaration",
                    "src": "4801:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 1251,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1222,
                        "name": "ElementaryTypeName",
                        "src": "4815:7:5"
                      }
                    ],
                    "id": 1223,
                    "name": "VariableDeclaration",
                    "src": "4815:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reference",
                      "scope": 1251,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string calldata",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 1224,
                        "name": "ElementaryTypeName",
                        "src": "4832:6:5"
                      }
                    ],
                    "id": 1225,
                    "name": "VariableDeclaration",
                    "src": "4832:17:5"
                  }
                ],
                "id": 1226,
                "name": "ParameterList",
                "src": "4800:50:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1229,
                "name": "ParameterList",
                "src": "4878:0:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1227,
                    "name": "Identifier",
                    "src": "4860:17:5"
                  }
                ],
                "id": 1228,
                "name": "ModifierInvocation",
                "src": "4860:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2337,
                              "type": "function (address,address,uint256,string memory)",
                              "value": "_recordIncomingTransaction"
                            },
                            "id": 1230,
                            "name": "Identifier",
                            "src": "4888:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1221,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1231,
                            "name": "Identifier",
                            "src": "4928:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12590,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1232,
                                "name": "Identifier",
                                "src": "4948:3:5"
                              }
                            ],
                            "id": 1233,
                            "name": "MemberAccess",
                            "src": "4948:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1223,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1234,
                            "name": "Identifier",
                            "src": "4972:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1225,
                              "type": "string calldata",
                              "value": "_reference"
                            },
                            "id": 1235,
                            "name": "Identifier",
                            "src": "4993:10:5"
                          }
                        ],
                        "id": 1236,
                        "name": "FunctionCall",
                        "src": "4888:125:5"
                      }
                    ],
                    "id": 1237,
                    "name": "ExpressionStatement",
                    "src": "4888:125:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1238,
                            "name": "Identifier",
                            "src": "5023:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transferFrom",
                                  "referencedDeclaration": 12282,
                                  "type": "function (address,address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1221,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 1239,
                                    "name": "Identifier",
                                    "src": "5031:6:5"
                                  }
                                ],
                                "id": 1240,
                                "name": "MemberAccess",
                                "src": "5031:19:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1241,
                                    "name": "Identifier",
                                    "src": "5051:3:5"
                                  }
                                ],
                                "id": 1242,
                                "name": "MemberAccess",
                                "src": "5051:10:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_Vault_$3519",
                                          "typeString": "contract Vault"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 1243,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5063:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1067,
                                      "type": "contract Vault",
                                      "value": "vault"
                                    },
                                    "id": 1244,
                                    "name": "Identifier",
                                    "src": "5071:5:5"
                                  }
                                ],
                                "id": 1245,
                                "name": "FunctionCall",
                                "src": "5063:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1223,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 1246,
                                "name": "Identifier",
                                "src": "5079:7:5"
                              }
                            ],
                            "id": 1247,
                            "name": "FunctionCall",
                            "src": "5031:56:5"
                          }
                        ],
                        "id": 1248,
                        "name": "FunctionCall",
                        "src": "5023:65:5"
                      }
                    ],
                    "id": 1249,
                    "name": "ExpressionStatement",
                    "src": "5023:65:5"
                  }
                ],
                "id": 1250,
                "name": "Block",
                "src": "4878:217:5"
              }
            ],
            "id": 1251,
            "name": "FunctionDefinition",
            "src": "4784:311:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "receiveApproval",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_from",
                      "scope": 1299,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1252,
                        "name": "ElementaryTypeName",
                        "src": "5411:7:5"
                      }
                    ],
                    "id": 1253,
                    "name": "VariableDeclaration",
                    "src": "5411:13:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 1299,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1254,
                        "name": "ElementaryTypeName",
                        "src": "5434:7:5"
                      }
                    ],
                    "id": 1255,
                    "name": "VariableDeclaration",
                    "src": "5434:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1299,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1256,
                        "name": "ElementaryTypeName",
                        "src": "5459:7:5"
                      }
                    ],
                    "id": 1257,
                    "name": "VariableDeclaration",
                    "src": "5459:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_data",
                      "scope": 1299,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes calldata",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 1258,
                        "name": "ElementaryTypeName",
                        "src": "5483:5:5"
                      }
                    ],
                    "id": 1259,
                    "name": "VariableDeclaration",
                    "src": "5483:11:5"
                  }
                ],
                "id": 1260,
                "name": "ParameterList",
                "src": "5401:99:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1263,
                "name": "ParameterList",
                "src": "5548:0:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1261,
                    "name": "Identifier",
                    "src": "5509:17:5"
                  }
                ],
                "id": 1262,
                "name": "ModifierInvocation",
                "src": "5509:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1264,
                            "name": "Identifier",
                            "src": "5558:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1265,
                                    "name": "Identifier",
                                    "src": "5566:3:5"
                                  }
                                ],
                                "id": 1266,
                                "name": "MemberAccess",
                                "src": "5566:10:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1257,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 1267,
                                "name": "Identifier",
                                "src": "5580:6:5"
                              }
                            ],
                            "id": 1268,
                            "name": "BinaryOperation",
                            "src": "5566:20:5"
                          }
                        ],
                        "id": 1269,
                        "name": "FunctionCall",
                        "src": "5558:29:5"
                      }
                    ],
                    "id": 1270,
                    "name": "ExpressionStatement",
                    "src": "5558:29:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1272
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "token",
                          "scope": 1299,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20",
                              "referencedDeclaration": 12300,
                              "type": "contract ERC20"
                            },
                            "id": 1271,
                            "name": "UserDefinedTypeName",
                            "src": "5597:5:5"
                          }
                        ],
                        "id": 1272,
                        "name": "VariableDeclaration",
                        "src": "5597:11:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract ERC20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12300,
                              "type": "type(contract ERC20)",
                              "value": "ERC20"
                            },
                            "id": 1273,
                            "name": "Identifier",
                            "src": "5611:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12590,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1274,
                                "name": "Identifier",
                                "src": "5617:3:5"
                              }
                            ],
                            "id": 1275,
                            "name": "MemberAccess",
                            "src": "5617:10:5"
                          }
                        ],
                        "id": 1276,
                        "name": "FunctionCall",
                        "src": "5611:17:5"
                      }
                    ],
                    "id": 1277,
                    "name": "VariableDeclarationStatement",
                    "src": "5597:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata",
                                  "typeString": "string calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2337,
                              "type": "function (address,address,uint256,string memory)",
                              "value": "_recordIncomingTransaction"
                            },
                            "id": 1278,
                            "name": "Identifier",
                            "src": "5638:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1272,
                              "type": "contract ERC20",
                              "value": "token"
                            },
                            "id": 1279,
                            "name": "Identifier",
                            "src": "5678:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1253,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 1280,
                            "name": "Identifier",
                            "src": "5697:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1255,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1281,
                            "name": "Identifier",
                            "src": "5716:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "string calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(string storage pointer)",
                                  "value": "string"
                                },
                                "id": 1282,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5737:6:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1259,
                                  "type": "bytes calldata",
                                  "value": "_data"
                                },
                                "id": 1283,
                                "name": "Identifier",
                                "src": "5744:5:5"
                              }
                            ],
                            "id": 1284,
                            "name": "FunctionCall",
                            "src": "5737:13:5"
                          }
                        ],
                        "id": 1285,
                        "name": "FunctionCall",
                        "src": "5638:122:5"
                      }
                    ],
                    "id": 1286,
                    "name": "ExpressionStatement",
                    "src": "5638:122:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1287,
                            "name": "Identifier",
                            "src": "5770:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transferFrom",
                                  "referencedDeclaration": 12282,
                                  "type": "function (address,address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1272,
                                      "type": "contract ERC20",
                                      "value": "token"
                                    },
                                    "id": 1288,
                                    "name": "Identifier",
                                    "src": "5778:5:5"
                                  }
                                ],
                                "id": 1289,
                                "name": "MemberAccess",
                                "src": "5778:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1253,
                                  "type": "address",
                                  "value": "_from"
                                },
                                "id": 1290,
                                "name": "Identifier",
                                "src": "5797:5:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_Vault_$3519",
                                          "typeString": "contract Vault"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 1291,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5804:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1067,
                                      "type": "contract Vault",
                                      "value": "vault"
                                    },
                                    "id": 1292,
                                    "name": "Identifier",
                                    "src": "5812:5:5"
                                  }
                                ],
                                "id": 1293,
                                "name": "FunctionCall",
                                "src": "5804:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1255,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 1294,
                                "name": "Identifier",
                                "src": "5820:7:5"
                              }
                            ],
                            "id": 1295,
                            "name": "FunctionCall",
                            "src": "5778:50:5"
                          }
                        ],
                        "id": 1296,
                        "name": "FunctionCall",
                        "src": "5770:59:5"
                      }
                    ],
                    "id": 1297,
                    "name": "ExpressionStatement",
                    "src": "5770:59:5"
                  }
                ],
                "id": 1298,
                "name": "Block",
                "src": "5548:288:5"
              }
            ],
            "id": 1299,
            "name": "FunctionDefinition",
            "src": "5377:459:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "tokenFallback",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": 10713,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "from",
                      "scope": 1341,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1300,
                        "name": "ElementaryTypeName",
                        "src": "6070:7:5"
                      }
                    ],
                    "id": 1301,
                    "name": "VariableDeclaration",
                    "src": "6070:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "amount",
                      "scope": 1341,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1302,
                        "name": "ElementaryTypeName",
                        "src": "6084:7:5"
                      }
                    ],
                    "id": 1303,
                    "name": "VariableDeclaration",
                    "src": "6084:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "data",
                      "scope": 1341,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes calldata",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 1304,
                        "name": "ElementaryTypeName",
                        "src": "6100:5:5"
                      }
                    ],
                    "id": 1305,
                    "name": "VariableDeclaration",
                    "src": "6100:10:5"
                  }
                ],
                "id": 1306,
                "name": "ParameterList",
                "src": "6069:42:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "success",
                      "scope": 1341,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1309,
                        "name": "ElementaryTypeName",
                        "src": "6148:4:5"
                      }
                    ],
                    "id": 1310,
                    "name": "VariableDeclaration",
                    "src": "6148:12:5"
                  }
                ],
                "id": 1311,
                "name": "ParameterList",
                "src": "6147:14:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1307,
                    "name": "Identifier",
                    "src": "6112:17:5"
                  }
                ],
                "id": 1308,
                "name": "ModifierInvocation",
                "src": "6112:17:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1313
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "token",
                          "scope": 1341,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20",
                              "referencedDeclaration": 12300,
                              "type": "contract ERC20"
                            },
                            "id": 1312,
                            "name": "UserDefinedTypeName",
                            "src": "6172:5:5"
                          }
                        ],
                        "id": 1313,
                        "name": "VariableDeclaration",
                        "src": "6172:11:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract ERC20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12300,
                              "type": "type(contract ERC20)",
                              "value": "ERC20"
                            },
                            "id": 1314,
                            "name": "Identifier",
                            "src": "6186:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12590,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1315,
                                "name": "Identifier",
                                "src": "6192:3:5"
                              }
                            ],
                            "id": 1316,
                            "name": "MemberAccess",
                            "src": "6192:10:5"
                          }
                        ],
                        "id": 1317,
                        "name": "FunctionCall",
                        "src": "6186:17:5"
                      }
                    ],
                    "id": 1318,
                    "name": "VariableDeclarationStatement",
                    "src": "6172:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata",
                                  "typeString": "string calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2337,
                              "type": "function (address,address,uint256,string memory)",
                              "value": "_recordIncomingTransaction"
                            },
                            "id": 1319,
                            "name": "Identifier",
                            "src": "6213:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1313,
                              "type": "contract ERC20",
                              "value": "token"
                            },
                            "id": 1320,
                            "name": "Identifier",
                            "src": "6253:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1301,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 1321,
                            "name": "Identifier",
                            "src": "6272:4:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1303,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 1322,
                            "name": "Identifier",
                            "src": "6290:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "string calldata",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_calldata_ptr",
                                      "typeString": "bytes calldata"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(string storage pointer)",
                                  "value": "string"
                                },
                                "id": 1323,
                                "name": "ElementaryTypeNameExpression",
                                "src": "6310:6:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1305,
                                  "type": "bytes calldata",
                                  "value": "data"
                                },
                                "id": 1324,
                                "name": "Identifier",
                                "src": "6317:4:5"
                              }
                            ],
                            "id": 1325,
                            "name": "FunctionCall",
                            "src": "6310:12:5"
                          }
                        ],
                        "id": 1326,
                        "name": "FunctionCall",
                        "src": "6213:119:5"
                      }
                    ],
                    "id": 1327,
                    "name": "ExpressionStatement",
                    "src": "6213:119:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1328,
                            "name": "Identifier",
                            "src": "6342:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 12323,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1313,
                                      "type": "contract ERC20",
                                      "value": "token"
                                    },
                                    "id": 1329,
                                    "name": "Identifier",
                                    "src": "6350:5:5"
                                  }
                                ],
                                "id": 1330,
                                "name": "MemberAccess",
                                "src": "6350:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_Vault_$3519",
                                          "typeString": "contract Vault"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 1331,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6365:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1067,
                                      "type": "contract Vault",
                                      "value": "vault"
                                    },
                                    "id": 1332,
                                    "name": "Identifier",
                                    "src": "6373:5:5"
                                  }
                                ],
                                "id": 1333,
                                "name": "FunctionCall",
                                "src": "6365:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1303,
                                  "type": "uint256",
                                  "value": "amount"
                                },
                                "id": 1334,
                                "name": "Identifier",
                                "src": "6381:6:5"
                              }
                            ],
                            "id": 1335,
                            "name": "FunctionCall",
                            "src": "6350:38:5"
                          }
                        ],
                        "id": 1336,
                        "name": "FunctionCall",
                        "src": "6342:47:5"
                      }
                    ],
                    "id": 1337,
                    "name": "ExpressionStatement",
                    "src": "6342:47:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1311
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 1338,
                        "name": "Literal",
                        "src": "6406:4:5"
                      }
                    ],
                    "id": 1339,
                    "name": "Return",
                    "src": "6399:11:5"
                  }
                ],
                "id": 1340,
                "name": "Block",
                "src": "6162:255:5"
              }
            ],
            "id": 1341,
            "name": "FunctionDefinition",
            "src": "6047:370:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "newPayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1342,
                        "name": "UserDefinedTypeName",
                        "src": "6976:5:5"
                      }
                    ],
                    "id": 1343,
                    "name": "VariableDeclaration",
                    "src": "6976:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_receiver",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1344,
                        "name": "ElementaryTypeName",
                        "src": "6998:7:5"
                      }
                    ],
                    "id": 1345,
                    "name": "VariableDeclaration",
                    "src": "6998:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1346,
                        "name": "ElementaryTypeName",
                        "src": "7025:7:5"
                      }
                    ],
                    "id": 1347,
                    "name": "VariableDeclaration",
                    "src": "7025:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_initialPaymentTime",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1348,
                        "name": "ElementaryTypeName",
                        "src": "7050:6:5"
                      }
                    ],
                    "id": 1349,
                    "name": "VariableDeclaration",
                    "src": "7050:26:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_interval",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1350,
                        "name": "ElementaryTypeName",
                        "src": "7086:6:5"
                      }
                    ],
                    "id": 1351,
                    "name": "VariableDeclaration",
                    "src": "7086:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_maxRepeats",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1352,
                        "name": "ElementaryTypeName",
                        "src": "7112:6:5"
                      }
                    ],
                    "id": 1353,
                    "name": "VariableDeclaration",
                    "src": "7112:18:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reference",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string calldata",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 1354,
                        "name": "ElementaryTypeName",
                        "src": "7140:6:5"
                      }
                    ],
                    "id": 1355,
                    "name": "VariableDeclaration",
                    "src": "7140:17:5"
                  }
                ],
                "id": 1356,
                "name": "ParameterList",
                "src": "6966:197:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "paymentId",
                      "scope": 1486,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1371,
                        "name": "ElementaryTypeName",
                        "src": "7294:7:5"
                      }
                    ],
                    "id": 1372,
                    "name": "VariableDeclaration",
                    "src": "7294:17:5"
                  }
                ],
                "id": 1373,
                "name": "ParameterList",
                "src": "7293:19:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1357,
                    "name": "Identifier",
                    "src": "7164:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 978,
                      "type": "bytes32",
                      "value": "CREATE_PAYMENTS_ROLE"
                    },
                    "id": 1358,
                    "name": "Identifier",
                    "src": "7170:20:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5659,
                          "type": "function (address,address,uint256,uint256,uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1359,
                        "name": "Identifier",
                        "src": "7192:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 1360,
                            "name": "ElementaryTypeNameExpression",
                            "src": "7196:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1343,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1361,
                            "name": "Identifier",
                            "src": "7204:6:5"
                          }
                        ],
                        "id": 1362,
                        "name": "FunctionCall",
                        "src": "7196:15:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1345,
                          "type": "address",
                          "value": "_receiver"
                        },
                        "id": 1363,
                        "name": "Identifier",
                        "src": "7213:9:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1347,
                          "type": "uint256",
                          "value": "_amount"
                        },
                        "id": 1364,
                        "name": "Identifier",
                        "src": "7224:7:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1351,
                          "type": "uint64",
                          "value": "_interval"
                        },
                        "id": 1365,
                        "name": "Identifier",
                        "src": "7233:9:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1353,
                          "type": "uint64",
                          "value": "_maxRepeats"
                        },
                        "id": 1366,
                        "name": "Identifier",
                        "src": "7244:11:5"
                      }
                    ],
                    "id": 1367,
                    "name": "FunctionCall",
                    "src": "7192:64:5"
                  }
                ],
                "id": 1368,
                "name": "ModifierInvocation",
                "src": "7164:93:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1369,
                    "name": "Identifier",
                    "src": "7258:17:5"
                  }
                ],
                "id": 1370,
                "name": "ModifierInvocation",
                "src": "7258:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1374,
                            "name": "Identifier",
                            "src": "7328:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "budgets",
                                          "referencedDeclaration": 1060,
                                          "type": "mapping(address => uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1080,
                                              "type": "struct Finance.Settings storage ref",
                                              "value": "settings"
                                            },
                                            "id": 1375,
                                            "name": "Identifier",
                                            "src": "7336:8:5"
                                          }
                                        ],
                                        "id": 1376,
                                        "name": "MemberAccess",
                                        "src": "7336:16:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1343,
                                          "type": "contract ERC20",
                                          "value": "_token"
                                        },
                                        "id": 1377,
                                        "name": "Identifier",
                                        "src": "7353:6:5"
                                      }
                                    ],
                                    "id": 1378,
                                    "name": "IndexAccess",
                                    "src": "7336:24:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1379,
                                    "name": "Literal",
                                    "src": "7363:1:5"
                                  }
                                ],
                                "id": 1380,
                                "name": "BinaryOperation",
                                "src": "7336:28:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "hasBudget",
                                          "referencedDeclaration": 1064,
                                          "type": "mapping(address => bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1080,
                                              "type": "struct Finance.Settings storage ref",
                                              "value": "settings"
                                            },
                                            "id": 1381,
                                            "name": "Identifier",
                                            "src": "7369:8:5"
                                          }
                                        ],
                                        "id": 1382,
                                        "name": "MemberAccess",
                                        "src": "7369:18:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1343,
                                          "type": "contract ERC20",
                                          "value": "_token"
                                        },
                                        "id": 1383,
                                        "name": "Identifier",
                                        "src": "7388:6:5"
                                      }
                                    ],
                                    "id": 1384,
                                    "name": "IndexAccess",
                                    "src": "7369:26:5"
                                  }
                                ],
                                "id": 1385,
                                "name": "UnaryOperation",
                                "src": "7368:27:5"
                              }
                            ],
                            "id": 1386,
                            "name": "BinaryOperation",
                            "src": "7336:59:5"
                          }
                        ],
                        "id": 1387,
                        "name": "FunctionCall",
                        "src": "7328:68:5"
                      }
                    ],
                    "id": 1388,
                    "name": "ExpressionStatement",
                    "src": "7328:68:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1349,
                                  "type": "uint64",
                                  "value": "_initialPaymentTime"
                                },
                                "id": 1389,
                                "name": "Identifier",
                                "src": "7518:19:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 1390,
                                    "name": "Identifier",
                                    "src": "7541:12:5"
                                  }
                                ],
                                "id": 1391,
                                "name": "FunctionCall",
                                "src": "7541:14:5"
                              }
                            ],
                            "id": 1392,
                            "name": "BinaryOperation",
                            "src": "7518:37:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1353,
                                  "type": "uint64",
                                  "value": "_maxRepeats"
                                },
                                "id": 1393,
                                "name": "Identifier",
                                "src": "7559:11:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 1394,
                                "name": "Literal",
                                "src": "7574:1:5"
                              }
                            ],
                            "id": 1395,
                            "name": "BinaryOperation",
                            "src": "7559:16:5"
                          }
                        ],
                        "id": 1396,
                        "name": "BinaryOperation",
                        "src": "7518:57:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2314,
                                      "type": "function (contract ERC20,address,uint256,uint256)",
                                      "value": "_makePaymentTransaction"
                                    },
                                    "id": 1397,
                                    "name": "Identifier",
                                    "src": "7591:23:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1343,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 1398,
                                    "name": "Identifier",
                                    "src": "7632:6:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1345,
                                      "type": "address",
                                      "value": "_receiver"
                                    },
                                    "id": 1399,
                                    "name": "Identifier",
                                    "src": "7656:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1347,
                                      "type": "uint256",
                                      "value": "_amount"
                                    },
                                    "id": 1400,
                                    "name": "Identifier",
                                    "src": "7683:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1401,
                                    "name": "Literal",
                                    "src": "7708:1:5"
                                  }
                                ],
                                "id": 1402,
                                "name": "FunctionCall",
                                "src": "7591:183:5"
                              }
                            ],
                            "id": 1403,
                            "name": "ExpressionStatement",
                            "src": "7591:183:5"
                          },
                          {
                            "attributes": {
                              "expression": null,
                              "functionReturnParameters": 1373
                            },
                            "id": 1404,
                            "name": "Return",
                            "src": "7788:7:5"
                          }
                        ],
                        "id": 1405,
                        "name": "Block",
                        "src": "7577:228:5"
                      }
                    ],
                    "id": 1406,
                    "name": "IfStatement",
                    "src": "7514:291:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1372,
                              "type": "uint256",
                              "value": "paymentId"
                            },
                            "id": 1407,
                            "name": "Identifier",
                            "src": "7815:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1072,
                                      "type": "struct Finance.Payment storage ref[] storage ref",
                                      "value": "payments"
                                    },
                                    "id": 1408,
                                    "name": "Identifier",
                                    "src": "7827:8:5"
                                  }
                                ],
                                "id": 1409,
                                "name": "MemberAccess",
                                "src": "7827:15:5"
                              }
                            ],
                            "id": 1410,
                            "name": "UnaryOperation",
                            "src": "7827:17:5"
                          }
                        ],
                        "id": 1411,
                        "name": "Assignment",
                        "src": "7815:29:5"
                      }
                    ],
                    "id": 1412,
                    "name": "ExpressionStatement",
                    "src": "7815:29:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1414
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "payment",
                          "scope": 1486,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Payment storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Payment",
                              "referencedDeclaration": 1019,
                              "type": "struct Finance.Payment storage pointer"
                            },
                            "id": 1413,
                            "name": "UserDefinedTypeName",
                            "src": "7855:7:5"
                          }
                        ],
                        "id": 1414,
                        "name": "VariableDeclaration",
                        "src": "7855:23:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Payment storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1072,
                              "type": "struct Finance.Payment storage ref[] storage ref",
                              "value": "payments"
                            },
                            "id": 1415,
                            "name": "Identifier",
                            "src": "7881:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1372,
                              "type": "uint256",
                              "value": "paymentId"
                            },
                            "id": 1416,
                            "name": "Identifier",
                            "src": "7890:9:5"
                          }
                        ],
                        "id": 1417,
                        "name": "IndexAccess",
                        "src": "7881:19:5"
                      }
                    ],
                    "id": 1418,
                    "name": "VariableDeclarationStatement",
                    "src": "7855:45:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ERC20"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "token",
                              "referencedDeclaration": 1000,
                              "type": "contract ERC20"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1419,
                                "name": "Identifier",
                                "src": "7910:7:5"
                              }
                            ],
                            "id": 1421,
                            "name": "MemberAccess",
                            "src": "7910:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1343,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1422,
                            "name": "Identifier",
                            "src": "7926:6:5"
                          }
                        ],
                        "id": 1423,
                        "name": "Assignment",
                        "src": "7910:22:5"
                      }
                    ],
                    "id": 1424,
                    "name": "ExpressionStatement",
                    "src": "7910:22:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "receiver",
                              "referencedDeclaration": 1002,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1425,
                                "name": "Identifier",
                                "src": "7942:7:5"
                              }
                            ],
                            "id": 1427,
                            "name": "MemberAccess",
                            "src": "7942:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1345,
                              "type": "address",
                              "value": "_receiver"
                            },
                            "id": 1428,
                            "name": "Identifier",
                            "src": "7961:9:5"
                          }
                        ],
                        "id": 1429,
                        "name": "Assignment",
                        "src": "7942:28:5"
                      }
                    ],
                    "id": 1430,
                    "name": "ExpressionStatement",
                    "src": "7942:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "amount",
                              "referencedDeclaration": 1016,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1431,
                                "name": "Identifier",
                                "src": "7980:7:5"
                              }
                            ],
                            "id": 1433,
                            "name": "MemberAccess",
                            "src": "7980:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1347,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1434,
                            "name": "Identifier",
                            "src": "7997:7:5"
                          }
                        ],
                        "id": 1435,
                        "name": "Assignment",
                        "src": "7980:24:5"
                      }
                    ],
                    "id": 1436,
                    "name": "ExpressionStatement",
                    "src": "7980:24:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "initialPaymentTime",
                              "referencedDeclaration": 1008,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1437,
                                "name": "Identifier",
                                "src": "8014:7:5"
                              }
                            ],
                            "id": 1439,
                            "name": "MemberAccess",
                            "src": "8014:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1349,
                              "type": "uint64",
                              "value": "_initialPaymentTime"
                            },
                            "id": 1440,
                            "name": "Identifier",
                            "src": "8043:19:5"
                          }
                        ],
                        "id": 1441,
                        "name": "Assignment",
                        "src": "8014:48:5"
                      }
                    ],
                    "id": 1442,
                    "name": "ExpressionStatement",
                    "src": "8014:48:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "interval",
                              "referencedDeclaration": 1010,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1443,
                                "name": "Identifier",
                                "src": "8072:7:5"
                              }
                            ],
                            "id": 1445,
                            "name": "MemberAccess",
                            "src": "8072:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1351,
                              "type": "uint64",
                              "value": "_interval"
                            },
                            "id": 1446,
                            "name": "Identifier",
                            "src": "8091:9:5"
                          }
                        ],
                        "id": 1447,
                        "name": "Assignment",
                        "src": "8072:28:5"
                      }
                    ],
                    "id": 1448,
                    "name": "ExpressionStatement",
                    "src": "8072:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "maxRepeats",
                              "referencedDeclaration": 1012,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1449,
                                "name": "Identifier",
                                "src": "8110:7:5"
                              }
                            ],
                            "id": 1451,
                            "name": "MemberAccess",
                            "src": "8110:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1353,
                              "type": "uint64",
                              "value": "_maxRepeats"
                            },
                            "id": 1452,
                            "name": "Identifier",
                            "src": "8131:11:5"
                          }
                        ],
                        "id": 1453,
                        "name": "Assignment",
                        "src": "8110:32:5"
                      }
                    ],
                    "id": 1454,
                    "name": "ExpressionStatement",
                    "src": "8110:32:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "reference",
                              "referencedDeclaration": 1018,
                              "type": "string storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1455,
                                "name": "Identifier",
                                "src": "8152:7:5"
                              }
                            ],
                            "id": 1457,
                            "name": "MemberAccess",
                            "src": "8152:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1355,
                              "type": "string calldata",
                              "value": "_reference"
                            },
                            "id": 1458,
                            "name": "Identifier",
                            "src": "8172:10:5"
                          }
                        ],
                        "id": 1459,
                        "name": "Assignment",
                        "src": "8152:30:5"
                      }
                    ],
                    "id": 1460,
                    "name": "ExpressionStatement",
                    "src": "8152:30:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "createdBy",
                              "referencedDeclaration": 1004,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1414,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1461,
                                "name": "Identifier",
                                "src": "8192:7:5"
                              }
                            ],
                            "id": 1463,
                            "name": "MemberAccess",
                            "src": "8192:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12590,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1464,
                                "name": "Identifier",
                                "src": "8212:3:5"
                              }
                            ],
                            "id": 1465,
                            "name": "MemberAccess",
                            "src": "8212:10:5"
                          }
                        ],
                        "id": 1466,
                        "name": "Assignment",
                        "src": "8192:30:5"
                      }
                    ],
                    "id": 1467,
                    "name": "ExpressionStatement",
                    "src": "8192:30:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1104,
                              "type": "function (uint256,address,uint64)",
                              "value": "NewPayment"
                            },
                            "id": 1468,
                            "name": "Identifier",
                            "src": "8233:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1372,
                              "type": "uint256",
                              "value": "paymentId"
                            },
                            "id": 1469,
                            "name": "Identifier",
                            "src": "8244:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1345,
                              "type": "address",
                              "value": "_receiver"
                            },
                            "id": 1470,
                            "name": "Identifier",
                            "src": "8255:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1353,
                              "type": "uint64",
                              "value": "_maxRepeats"
                            },
                            "id": 1471,
                            "name": "Identifier",
                            "src": "8266:11:5"
                          }
                        ],
                        "id": 1472,
                        "name": "FunctionCall",
                        "src": "8233:45:5"
                      }
                    ],
                    "id": 1473,
                    "name": "ExpressionStatement",
                    "src": "8233:45:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint64",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2077,
                                  "type": "function (uint256) view returns (uint64)",
                                  "value": "nextPaymentTime"
                                },
                                "id": 1474,
                                "name": "Identifier",
                                "src": "8293:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1372,
                                  "type": "uint256",
                                  "value": "paymentId"
                                },
                                "id": 1475,
                                "name": "Identifier",
                                "src": "8309:9:5"
                              }
                            ],
                            "id": 1476,
                            "name": "FunctionCall",
                            "src": "8293:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2554,
                                  "type": "function () view returns (uint256)",
                                  "value": "getTimestamp"
                                },
                                "id": 1477,
                                "name": "Identifier",
                                "src": "8323:12:5"
                              }
                            ],
                            "id": 1478,
                            "name": "FunctionCall",
                            "src": "8323:14:5"
                          }
                        ],
                        "id": 1479,
                        "name": "BinaryOperation",
                        "src": "8293:44:5"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "tuple()",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2250,
                                  "type": "function (uint256)",
                                  "value": "_executePayment"
                                },
                                "id": 1480,
                                "name": "Identifier",
                                "src": "8351:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1372,
                                  "type": "uint256",
                                  "value": "paymentId"
                                },
                                "id": 1481,
                                "name": "Identifier",
                                "src": "8367:9:5"
                              }
                            ],
                            "id": 1482,
                            "name": "FunctionCall",
                            "src": "8351:26:5"
                          }
                        ],
                        "id": 1483,
                        "name": "ExpressionStatement",
                        "src": "8351:26:5"
                      }
                    ],
                    "id": 1484,
                    "name": "IfStatement",
                    "src": "8289:88:5"
                  }
                ],
                "id": 1485,
                "name": "Block",
                "src": "7317:1067:5"
              }
            ],
            "id": 1486,
            "name": "FunctionDefinition",
            "src": "6947:1437:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "setPeriodDuration",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodDuration",
                      "scope": 1522,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1487,
                        "name": "ElementaryTypeName",
                        "src": "8603:6:5"
                      }
                    ],
                    "id": 1488,
                    "name": "VariableDeclaration",
                    "src": "8603:22:5"
                  }
                ],
                "id": 1489,
                "name": "ParameterList",
                "src": "8602:24:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1504,
                "name": "ParameterList",
                "src": "8745:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1490,
                    "name": "Identifier",
                    "src": "8627:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 983,
                      "type": "bytes32",
                      "value": "CHANGE_PERIOD_ROLE"
                    },
                    "id": 1491,
                    "name": "Identifier",
                    "src": "8633:18:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5763,
                          "type": "function (uint256,uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1492,
                        "name": "Identifier",
                        "src": "8653:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint256)",
                              "value": "uint256"
                            },
                            "id": 1493,
                            "name": "ElementaryTypeNameExpression",
                            "src": "8657:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1488,
                              "type": "uint64",
                              "value": "_periodDuration"
                            },
                            "id": 1494,
                            "name": "Identifier",
                            "src": "8665:15:5"
                          }
                        ],
                        "id": 1495,
                        "name": "FunctionCall",
                        "src": "8657:24:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint256)",
                              "value": "uint256"
                            },
                            "id": 1496,
                            "name": "ElementaryTypeNameExpression",
                            "src": "8683:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "periodDuration",
                              "referencedDeclaration": 1056,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1080,
                                  "type": "struct Finance.Settings storage ref",
                                  "value": "settings"
                                },
                                "id": 1497,
                                "name": "Identifier",
                                "src": "8691:8:5"
                              }
                            ],
                            "id": 1498,
                            "name": "MemberAccess",
                            "src": "8691:23:5"
                          }
                        ],
                        "id": 1499,
                        "name": "FunctionCall",
                        "src": "8683:32:5"
                      }
                    ],
                    "id": 1500,
                    "name": "FunctionCall",
                    "src": "8653:63:5"
                  }
                ],
                "id": 1501,
                "name": "ModifierInvocation",
                "src": "8627:90:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1502,
                    "name": "Identifier",
                    "src": "8718:17:5"
                  }
                ],
                "id": 1503,
                "name": "ModifierInvocation",
                "src": "8718:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1505,
                            "name": "Identifier",
                            "src": "8755:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1488,
                                  "type": "uint64",
                                  "value": "_periodDuration"
                                },
                                "id": 1506,
                                "name": "Identifier",
                                "src": "8763:15:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 1507,
                                "name": "Literal",
                                "src": "8781:1:5"
                              }
                            ],
                            "id": 1508,
                            "name": "BinaryOperation",
                            "src": "8763:19:5"
                          }
                        ],
                        "id": 1509,
                        "name": "FunctionCall",
                        "src": "8755:28:5"
                      }
                    ],
                    "id": 1510,
                    "name": "ExpressionStatement",
                    "src": "8755:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "periodDuration",
                              "referencedDeclaration": 1056,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1080,
                                  "type": "struct Finance.Settings storage ref",
                                  "value": "settings"
                                },
                                "id": 1511,
                                "name": "Identifier",
                                "src": "8793:8:5"
                              }
                            ],
                            "id": 1513,
                            "name": "MemberAccess",
                            "src": "8793:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1488,
                              "type": "uint64",
                              "value": "_periodDuration"
                            },
                            "id": 1514,
                            "name": "Identifier",
                            "src": "8819:15:5"
                          }
                        ],
                        "id": 1515,
                        "name": "Assignment",
                        "src": "8793:41:5"
                      }
                    ],
                    "id": 1516,
                    "name": "ExpressionStatement",
                    "src": "8793:41:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1122,
                              "type": "function (uint64)",
                              "value": "ChangePeriodDuration"
                            },
                            "id": 1517,
                            "name": "Identifier",
                            "src": "8844:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1488,
                              "type": "uint64",
                              "value": "_periodDuration"
                            },
                            "id": 1518,
                            "name": "Identifier",
                            "src": "8865:15:5"
                          }
                        ],
                        "id": 1519,
                        "name": "FunctionCall",
                        "src": "8844:37:5"
                      }
                    ],
                    "id": 1520,
                    "name": "ExpressionStatement",
                    "src": "8844:37:5"
                  }
                ],
                "id": 1521,
                "name": "Block",
                "src": "8745:143:5"
              }
            ],
            "id": 1522,
            "name": "FunctionDefinition",
            "src": "8576:312:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "setBudget",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1574,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1523,
                        "name": "UserDefinedTypeName",
                        "src": "9097:5:5"
                      }
                    ],
                    "id": 1524,
                    "name": "VariableDeclaration",
                    "src": "9097:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 1574,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1525,
                        "name": "ElementaryTypeName",
                        "src": "9111:7:5"
                      }
                    ],
                    "id": 1526,
                    "name": "VariableDeclaration",
                    "src": "9111:15:5"
                  }
                ],
                "id": 1527,
                "name": "ParameterList",
                "src": "9096:31:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1543,
                "name": "ParameterList",
                "src": "9239:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1528,
                    "name": "Identifier",
                    "src": "9128:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 988,
                      "type": "bytes32",
                      "value": "CHANGE_BUDGETS_ROLE"
                    },
                    "id": 1529,
                    "name": "Identifier",
                    "src": "9134:19:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5610,
                          "type": "function (address,uint256,uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1530,
                        "name": "Identifier",
                        "src": "9155:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 1531,
                            "name": "ElementaryTypeNameExpression",
                            "src": "9159:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1524,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1532,
                            "name": "Identifier",
                            "src": "9167:6:5"
                          }
                        ],
                        "id": 1533,
                        "name": "FunctionCall",
                        "src": "9159:15:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1526,
                          "type": "uint256",
                          "value": "_amount"
                        },
                        "id": 1534,
                        "name": "Identifier",
                        "src": "9176:7:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "budgets",
                              "referencedDeclaration": 1060,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1080,
                                  "type": "struct Finance.Settings storage ref",
                                  "value": "settings"
                                },
                                "id": 1535,
                                "name": "Identifier",
                                "src": "9185:8:5"
                              }
                            ],
                            "id": 1536,
                            "name": "MemberAccess",
                            "src": "9185:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1524,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1537,
                            "name": "Identifier",
                            "src": "9202:6:5"
                          }
                        ],
                        "id": 1538,
                        "name": "IndexAccess",
                        "src": "9185:24:5"
                      }
                    ],
                    "id": 1539,
                    "name": "FunctionCall",
                    "src": "9155:55:5"
                  }
                ],
                "id": 1540,
                "name": "ModifierInvocation",
                "src": "9128:83:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1541,
                    "name": "Identifier",
                    "src": "9212:17:5"
                  }
                ],
                "id": 1542,
                "name": "ModifierInvocation",
                "src": "9212:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "budgets",
                                  "referencedDeclaration": 1060,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 1544,
                                    "name": "Identifier",
                                    "src": "9249:8:5"
                                  }
                                ],
                                "id": 1547,
                                "name": "MemberAccess",
                                "src": "9249:16:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1524,
                                  "type": "contract ERC20",
                                  "value": "_token"
                                },
                                "id": 1546,
                                "name": "Identifier",
                                "src": "9266:6:5"
                              }
                            ],
                            "id": 1548,
                            "name": "IndexAccess",
                            "src": "9249:24:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1526,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1549,
                            "name": "Identifier",
                            "src": "9276:7:5"
                          }
                        ],
                        "id": 1550,
                        "name": "Assignment",
                        "src": "9249:34:5"
                      }
                    ],
                    "id": 1551,
                    "name": "ExpressionStatement",
                    "src": "9249:34:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hasBudget",
                                  "referencedDeclaration": 1064,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 1552,
                                    "name": "Identifier",
                                    "src": "9298:8:5"
                                  }
                                ],
                                "id": 1553,
                                "name": "MemberAccess",
                                "src": "9298:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1524,
                                  "type": "contract ERC20",
                                  "value": "_token"
                                },
                                "id": 1554,
                                "name": "Identifier",
                                "src": "9317:6:5"
                              }
                            ],
                            "id": 1555,
                            "name": "IndexAccess",
                            "src": "9298:26:5"
                          }
                        ],
                        "id": 1556,
                        "name": "UnaryOperation",
                        "src": "9297:27:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "hasBudget",
                                          "referencedDeclaration": 1064,
                                          "type": "mapping(address => bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1080,
                                              "type": "struct Finance.Settings storage ref",
                                              "value": "settings"
                                            },
                                            "id": 1557,
                                            "name": "Identifier",
                                            "src": "9340:8:5"
                                          }
                                        ],
                                        "id": 1560,
                                        "name": "MemberAccess",
                                        "src": "9340:18:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1524,
                                          "type": "contract ERC20",
                                          "value": "_token"
                                        },
                                        "id": 1559,
                                        "name": "Identifier",
                                        "src": "9359:6:5"
                                      }
                                    ],
                                    "id": 1561,
                                    "name": "IndexAccess",
                                    "src": "9340:26:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "74727565",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "bool",
                                      "type": "bool",
                                      "value": "true"
                                    },
                                    "id": 1562,
                                    "name": "Literal",
                                    "src": "9369:4:5"
                                  }
                                ],
                                "id": 1563,
                                "name": "Assignment",
                                "src": "9340:33:5"
                              }
                            ],
                            "id": 1564,
                            "name": "ExpressionStatement",
                            "src": "9340:33:5"
                          }
                        ],
                        "id": 1565,
                        "name": "Block",
                        "src": "9326:58:5"
                      }
                    ],
                    "id": 1566,
                    "name": "IfStatement",
                    "src": "9293:91:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1096,
                              "type": "function (address,uint256,bool)",
                              "value": "SetBudget"
                            },
                            "id": 1567,
                            "name": "Identifier",
                            "src": "9393:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1524,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1568,
                            "name": "Identifier",
                            "src": "9403:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1526,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1569,
                            "name": "Identifier",
                            "src": "9411:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 1570,
                            "name": "Literal",
                            "src": "9420:4:5"
                          }
                        ],
                        "id": 1571,
                        "name": "FunctionCall",
                        "src": "9393:32:5"
                      }
                    ],
                    "id": 1572,
                    "name": "ExpressionStatement",
                    "src": "9393:32:5"
                  }
                ],
                "id": 1573,
                "name": "Block",
                "src": "9239:193:5"
              }
            ],
            "id": 1574,
            "name": "FunctionDefinition",
            "src": "9078:354:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "removeBudget",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1611,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1575,
                        "name": "UserDefinedTypeName",
                        "src": "9593:5:5"
                      }
                    ],
                    "id": 1576,
                    "name": "VariableDeclaration",
                    "src": "9593:12:5"
                  }
                ],
                "id": 1577,
                "name": "ParameterList",
                "src": "9592:14:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1595,
                "name": "ParameterList",
                "src": "9721:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1578,
                    "name": "Identifier",
                    "src": "9607:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 988,
                      "type": "bytes32",
                      "value": "CHANGE_BUDGETS_ROLE"
                    },
                    "id": 1579,
                    "name": "Identifier",
                    "src": "9613:19:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5610,
                          "type": "function (address,uint256,uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1580,
                        "name": "Identifier",
                        "src": "9634:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "address",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(address)",
                              "value": "address"
                            },
                            "id": 1581,
                            "name": "ElementaryTypeNameExpression",
                            "src": "9638:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1576,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1582,
                            "name": "Identifier",
                            "src": "9646:6:5"
                          }
                        ],
                        "id": 1583,
                        "name": "FunctionCall",
                        "src": "9638:15:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint256)",
                              "value": "uint256"
                            },
                            "id": 1584,
                            "name": "ElementaryTypeNameExpression",
                            "src": "9655:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1585,
                            "name": "Literal",
                            "src": "9663:1:5"
                          }
                        ],
                        "id": 1586,
                        "name": "FunctionCall",
                        "src": "9655:10:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "budgets",
                              "referencedDeclaration": 1060,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1080,
                                  "type": "struct Finance.Settings storage ref",
                                  "value": "settings"
                                },
                                "id": 1587,
                                "name": "Identifier",
                                "src": "9667:8:5"
                              }
                            ],
                            "id": 1588,
                            "name": "MemberAccess",
                            "src": "9667:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1576,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1589,
                            "name": "Identifier",
                            "src": "9684:6:5"
                          }
                        ],
                        "id": 1590,
                        "name": "IndexAccess",
                        "src": "9667:24:5"
                      }
                    ],
                    "id": 1591,
                    "name": "FunctionCall",
                    "src": "9634:58:5"
                  }
                ],
                "id": 1592,
                "name": "ModifierInvocation",
                "src": "9607:86:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 1593,
                    "name": "Identifier",
                    "src": "9694:17:5"
                  }
                ],
                "id": 1594,
                "name": "ModifierInvocation",
                "src": "9694:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hasBudget",
                                  "referencedDeclaration": 1064,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 1596,
                                    "name": "Identifier",
                                    "src": "9731:8:5"
                                  }
                                ],
                                "id": 1599,
                                "name": "MemberAccess",
                                "src": "9731:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1576,
                                  "type": "contract ERC20",
                                  "value": "_token"
                                },
                                "id": 1598,
                                "name": "Identifier",
                                "src": "9750:6:5"
                              }
                            ],
                            "id": 1600,
                            "name": "IndexAccess",
                            "src": "9731:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 1601,
                            "name": "Literal",
                            "src": "9760:5:5"
                          }
                        ],
                        "id": 1602,
                        "name": "Assignment",
                        "src": "9731:34:5"
                      }
                    ],
                    "id": 1603,
                    "name": "ExpressionStatement",
                    "src": "9731:34:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1096,
                              "type": "function (address,uint256,bool)",
                              "value": "SetBudget"
                            },
                            "id": 1604,
                            "name": "Identifier",
                            "src": "9775:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1576,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 1605,
                            "name": "Identifier",
                            "src": "9785:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1606,
                            "name": "Literal",
                            "src": "9793:1:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 1607,
                            "name": "Literal",
                            "src": "9796:5:5"
                          }
                        ],
                        "id": 1608,
                        "name": "FunctionCall",
                        "src": "9775:27:5"
                      }
                    ],
                    "id": 1609,
                    "name": "ExpressionStatement",
                    "src": "9775:27:5"
                  }
                ],
                "id": 1610,
                "name": "Block",
                "src": "9721:88:5"
              }
            ],
            "id": 1611,
            "name": "FunctionDefinition",
            "src": "9571:238:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "executePayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 1636,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1612,
                        "name": "ElementaryTypeName",
                        "src": "10016:7:5"
                      }
                    ],
                    "id": 1613,
                    "name": "VariableDeclaration",
                    "src": "10016:18:5"
                  }
                ],
                "id": 1614,
                "name": "ParameterList",
                "src": "10015:20:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1621,
                "name": "ParameterList",
                "src": "10091:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1615,
                    "name": "Identifier",
                    "src": "10036:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 993,
                      "type": "bytes32",
                      "value": "EXECUTE_PAYMENTS_ROLE"
                    },
                    "id": 1616,
                    "name": "Identifier",
                    "src": "10042:21:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5732,
                          "type": "function (uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1617,
                        "name": "Identifier",
                        "src": "10065:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1613,
                          "type": "uint256",
                          "value": "_paymentId"
                        },
                        "id": 1618,
                        "name": "Identifier",
                        "src": "10069:10:5"
                      }
                    ],
                    "id": 1619,
                    "name": "FunctionCall",
                    "src": "10065:15:5"
                  }
                ],
                "id": 1620,
                "name": "ModifierInvocation",
                "src": "10036:45:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1622,
                            "name": "Identifier",
                            "src": "10101:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint64",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2077,
                                      "type": "function (uint256) view returns (uint64)",
                                      "value": "nextPaymentTime"
                                    },
                                    "id": 1623,
                                    "name": "Identifier",
                                    "src": "10109:15:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1613,
                                      "type": "uint256",
                                      "value": "_paymentId"
                                    },
                                    "id": 1624,
                                    "name": "Identifier",
                                    "src": "10125:10:5"
                                  }
                                ],
                                "id": 1625,
                                "name": "FunctionCall",
                                "src": "10109:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 1626,
                                    "name": "Identifier",
                                    "src": "10140:12:5"
                                  }
                                ],
                                "id": 1627,
                                "name": "FunctionCall",
                                "src": "10140:14:5"
                              }
                            ],
                            "id": 1628,
                            "name": "BinaryOperation",
                            "src": "10109:45:5"
                          }
                        ],
                        "id": 1629,
                        "name": "FunctionCall",
                        "src": "10101:54:5"
                      }
                    ],
                    "id": 1630,
                    "name": "ExpressionStatement",
                    "src": "10101:54:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2250,
                              "type": "function (uint256)",
                              "value": "_executePayment"
                            },
                            "id": 1631,
                            "name": "Identifier",
                            "src": "10166:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1613,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 1632,
                            "name": "Identifier",
                            "src": "10182:10:5"
                          }
                        ],
                        "id": 1633,
                        "name": "FunctionCall",
                        "src": "10166:27:5"
                      }
                    ],
                    "id": 1634,
                    "name": "ExpressionStatement",
                    "src": "10166:27:5"
                  }
                ],
                "id": 1635,
                "name": "Block",
                "src": "10091:109:5"
              }
            ],
            "id": 1636,
            "name": "FunctionDefinition",
            "src": "9992:208:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "receiverExecutePayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 1665,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1637,
                        "name": "ElementaryTypeName",
                        "src": "10424:7:5"
                      }
                    ],
                    "id": 1638,
                    "name": "VariableDeclaration",
                    "src": "10424:18:5"
                  }
                ],
                "id": 1639,
                "name": "ParameterList",
                "src": "10423:20:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1640,
                "name": "ParameterList",
                "src": "10453:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1641,
                            "name": "Identifier",
                            "src": "10463:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint64",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2077,
                                      "type": "function (uint256) view returns (uint64)",
                                      "value": "nextPaymentTime"
                                    },
                                    "id": 1642,
                                    "name": "Identifier",
                                    "src": "10471:15:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1638,
                                      "type": "uint256",
                                      "value": "_paymentId"
                                    },
                                    "id": 1643,
                                    "name": "Identifier",
                                    "src": "10487:10:5"
                                  }
                                ],
                                "id": 1644,
                                "name": "FunctionCall",
                                "src": "10471:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 1645,
                                    "name": "Identifier",
                                    "src": "10502:12:5"
                                  }
                                ],
                                "id": 1646,
                                "name": "FunctionCall",
                                "src": "10502:14:5"
                              }
                            ],
                            "id": 1647,
                            "name": "BinaryOperation",
                            "src": "10471:45:5"
                          }
                        ],
                        "id": 1648,
                        "name": "FunctionCall",
                        "src": "10463:54:5"
                      }
                    ],
                    "id": 1649,
                    "name": "ExpressionStatement",
                    "src": "10463:54:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1650,
                            "name": "Identifier",
                            "src": "10527:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "receiver",
                                  "referencedDeclaration": 1002,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Finance.Payment storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1072,
                                          "type": "struct Finance.Payment storage ref[] storage ref",
                                          "value": "payments"
                                        },
                                        "id": 1651,
                                        "name": "Identifier",
                                        "src": "10535:8:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1638,
                                          "type": "uint256",
                                          "value": "_paymentId"
                                        },
                                        "id": 1652,
                                        "name": "Identifier",
                                        "src": "10544:10:5"
                                      }
                                    ],
                                    "id": 1653,
                                    "name": "IndexAccess",
                                    "src": "10535:20:5"
                                  }
                                ],
                                "id": 1654,
                                "name": "MemberAccess",
                                "src": "10535:29:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 1655,
                                    "name": "Identifier",
                                    "src": "10568:3:5"
                                  }
                                ],
                                "id": 1656,
                                "name": "MemberAccess",
                                "src": "10568:10:5"
                              }
                            ],
                            "id": 1657,
                            "name": "BinaryOperation",
                            "src": "10535:43:5"
                          }
                        ],
                        "id": 1658,
                        "name": "FunctionCall",
                        "src": "10527:52:5"
                      }
                    ],
                    "id": 1659,
                    "name": "ExpressionStatement",
                    "src": "10527:52:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2250,
                              "type": "function (uint256)",
                              "value": "_executePayment"
                            },
                            "id": 1660,
                            "name": "Identifier",
                            "src": "10590:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1638,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 1661,
                            "name": "Identifier",
                            "src": "10606:10:5"
                          }
                        ],
                        "id": 1662,
                        "name": "FunctionCall",
                        "src": "10590:27:5"
                      }
                    ],
                    "id": 1663,
                    "name": "ExpressionStatement",
                    "src": "10590:27:5"
                  }
                ],
                "id": 1664,
                "name": "Block",
                "src": "10453:171:5"
              }
            ],
            "id": 1665,
            "name": "FunctionDefinition",
            "src": "10392:232:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "setPaymentDisabled",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 1691,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1666,
                        "name": "ElementaryTypeName",
                        "src": "10862:7:5"
                      }
                    ],
                    "id": 1667,
                    "name": "VariableDeclaration",
                    "src": "10862:18:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_disabled",
                      "scope": 1691,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1668,
                        "name": "ElementaryTypeName",
                        "src": "10882:4:5"
                      }
                    ],
                    "id": 1669,
                    "name": "VariableDeclaration",
                    "src": "10882:14:5"
                  }
                ],
                "id": 1670,
                "name": "ParameterList",
                "src": "10861:36:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1677,
                "name": "ParameterList",
                "src": "10953:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 6921,
                      "type": "modifier (bytes32,uint256[] memory)",
                      "value": "authP"
                    },
                    "id": 1671,
                    "name": "Identifier",
                    "src": "10898:5:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 998,
                      "type": "bytes32",
                      "value": "DISABLE_PAYMENTS_ROLE"
                    },
                    "id": 1672,
                    "name": "Identifier",
                    "src": "10904:21:5"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256[] memory",
                      "type_conversion": false
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "overloadedDeclarations": [
                            5519,
                            5534,
                            5554,
                            5569,
                            5589,
                            5610,
                            5630,
                            5659,
                            5684,
                            5709,
                            5732,
                            5763,
                            5802,
                            5849,
                            5904
                          ],
                          "referencedDeclaration": 5732,
                          "type": "function (uint256) pure returns (uint256[] memory)",
                          "value": "arr"
                        },
                        "id": 1673,
                        "name": "Identifier",
                        "src": "10927:3:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1667,
                          "type": "uint256",
                          "value": "_paymentId"
                        },
                        "id": 1674,
                        "name": "Identifier",
                        "src": "10931:10:5"
                      }
                    ],
                    "id": 1675,
                    "name": "FunctionCall",
                    "src": "10927:15:5"
                  }
                ],
                "id": 1676,
                "name": "ModifierInvocation",
                "src": "10898:45:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "disabled",
                              "referencedDeclaration": 1006,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Finance.Payment storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1072,
                                      "type": "struct Finance.Payment storage ref[] storage ref",
                                      "value": "payments"
                                    },
                                    "id": 1678,
                                    "name": "Identifier",
                                    "src": "10963:8:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1667,
                                      "type": "uint256",
                                      "value": "_paymentId"
                                    },
                                    "id": 1679,
                                    "name": "Identifier",
                                    "src": "10972:10:5"
                                  }
                                ],
                                "id": 1680,
                                "name": "IndexAccess",
                                "src": "10963:20:5"
                              }
                            ],
                            "id": 1681,
                            "name": "MemberAccess",
                            "src": "10963:29:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1669,
                              "type": "bool",
                              "value": "_disabled"
                            },
                            "id": 1682,
                            "name": "Identifier",
                            "src": "10995:9:5"
                          }
                        ],
                        "id": 1683,
                        "name": "Assignment",
                        "src": "10963:41:5"
                      }
                    ],
                    "id": 1684,
                    "name": "ExpressionStatement",
                    "src": "10963:41:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1118,
                              "type": "function (uint256,bool)",
                              "value": "ChangePaymentState"
                            },
                            "id": 1685,
                            "name": "Identifier",
                            "src": "11014:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1667,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 1686,
                            "name": "Identifier",
                            "src": "11033:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1669,
                              "type": "bool",
                              "value": "_disabled"
                            },
                            "id": 1687,
                            "name": "Identifier",
                            "src": "11045:9:5"
                          }
                        ],
                        "id": 1688,
                        "name": "FunctionCall",
                        "src": "11014:41:5"
                      }
                    ],
                    "id": 1689,
                    "name": "ExpressionStatement",
                    "src": "11014:41:5"
                  }
                ],
                "id": 1690,
                "name": "Block",
                "src": "10953:109:5"
              }
            ],
            "id": 1691,
            "name": "FunctionDefinition",
            "src": "10834:228:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "depositToVault",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 1733,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1692,
                        "name": "ElementaryTypeName",
                        "src": "11496:7:5"
                      }
                    ],
                    "id": 1693,
                    "name": "VariableDeclaration",
                    "src": "11496:14:5"
                  }
                ],
                "id": 1694,
                "name": "ParameterList",
                "src": "11495:16:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1695,
                "name": "ParameterList",
                "src": "11519:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1697
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "token",
                          "scope": 1733,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract ERC20",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "ERC20",
                              "referencedDeclaration": 12300,
                              "type": "contract ERC20"
                            },
                            "id": 1696,
                            "name": "UserDefinedTypeName",
                            "src": "11529:5:5"
                          }
                        ],
                        "id": 1697,
                        "name": "VariableDeclaration",
                        "src": "11529:11:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "contract ERC20",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12300,
                              "type": "type(contract ERC20)",
                              "value": "ERC20"
                            },
                            "id": 1698,
                            "name": "Identifier",
                            "src": "11543:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1693,
                              "type": "address",
                              "value": "_token"
                            },
                            "id": 1699,
                            "name": "Identifier",
                            "src": "11549:6:5"
                          }
                        ],
                        "id": 1700,
                        "name": "FunctionCall",
                        "src": "11543:13:5"
                      }
                    ],
                    "id": 1701,
                    "name": "VariableDeclarationStatement",
                    "src": "11529:27:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1703
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "value",
                          "scope": 1733,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1702,
                            "name": "ElementaryTypeName",
                            "src": "11566:7:5"
                          }
                        ],
                        "id": 1703,
                        "name": "VariableDeclaration",
                        "src": "11566:13:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Finance_$2555",
                                  "typeString": "contract Finance"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "balanceOf",
                              "referencedDeclaration": 12314,
                              "type": "function (address) view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1697,
                                  "type": "contract ERC20",
                                  "value": "token"
                                },
                                "id": 1704,
                                "name": "Identifier",
                                "src": "11582:5:5"
                              }
                            ],
                            "id": 1705,
                            "name": "MemberAccess",
                            "src": "11582:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12719,
                              "type": "contract Finance",
                              "value": "this"
                            },
                            "id": 1706,
                            "name": "Identifier",
                            "src": "11598:4:5"
                          }
                        ],
                        "id": 1707,
                        "name": "FunctionCall",
                        "src": "11582:21:5"
                      }
                    ],
                    "id": 1708,
                    "name": "VariableDeclarationStatement",
                    "src": "11566:37:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1709,
                            "name": "Identifier",
                            "src": "11613:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1703,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 1710,
                                "name": "Identifier",
                                "src": "11621:5:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1711,
                                "name": "Literal",
                                "src": "11629:1:5"
                              }
                            ],
                            "id": 1712,
                            "name": "BinaryOperation",
                            "src": "11621:9:5"
                          }
                        ],
                        "id": 1713,
                        "name": "FunctionCall",
                        "src": "11613:18:5"
                      }
                    ],
                    "id": 1714,
                    "name": "ExpressionStatement",
                    "src": "11613:18:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_contract$_Finance_$2555",
                                  "typeString": "contract Finance"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_f0b5bf912e815f0e5905bd4a87721621fd6c3679de173aa387e80f4931413cfe",
                                  "typeString": "literal_string \"Deposit to Vault\""
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2337,
                              "type": "function (address,address,uint256,string memory)",
                              "value": "_recordIncomingTransaction"
                            },
                            "id": 1715,
                            "name": "Identifier",
                            "src": "11642:26:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1697,
                              "type": "contract ERC20",
                              "value": "token"
                            },
                            "id": 1716,
                            "name": "Identifier",
                            "src": "11682:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12719,
                              "type": "contract Finance",
                              "value": "this"
                            },
                            "id": 1717,
                            "name": "Identifier",
                            "src": "11701:4:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1703,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 1718,
                            "name": "Identifier",
                            "src": "11719:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4465706f73697420746f205661756c74",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"Deposit to Vault\"",
                              "value": "Deposit to Vault"
                            },
                            "id": 1719,
                            "name": "Literal",
                            "src": "11738:18:5"
                          }
                        ],
                        "id": 1720,
                        "name": "FunctionCall",
                        "src": "11642:124:5"
                      }
                    ],
                    "id": 1721,
                    "name": "ExpressionStatement",
                    "src": "11642:124:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 1722,
                            "name": "Identifier",
                            "src": "11776:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "transfer",
                                  "referencedDeclaration": 12323,
                                  "type": "function (address,uint256) external returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1697,
                                      "type": "contract ERC20",
                                      "value": "token"
                                    },
                                    "id": 1723,
                                    "name": "Identifier",
                                    "src": "11784:5:5"
                                  }
                                ],
                                "id": 1724,
                                "name": "MemberAccess",
                                "src": "11784:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_Vault_$3519",
                                          "typeString": "contract Vault"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 1725,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "11799:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1067,
                                      "type": "contract Vault",
                                      "value": "vault"
                                    },
                                    "id": 1726,
                                    "name": "Identifier",
                                    "src": "11807:5:5"
                                  }
                                ],
                                "id": 1727,
                                "name": "FunctionCall",
                                "src": "11799:14:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1703,
                                  "type": "uint256",
                                  "value": "value"
                                },
                                "id": 1728,
                                "name": "Identifier",
                                "src": "11815:5:5"
                              }
                            ],
                            "id": 1729,
                            "name": "FunctionCall",
                            "src": "11784:37:5"
                          }
                        ],
                        "id": 1730,
                        "name": "FunctionCall",
                        "src": "11776:46:5"
                      }
                    ],
                    "id": 1731,
                    "name": "ExpressionStatement",
                    "src": "11776:46:5"
                  }
                ],
                "id": 1732,
                "name": "Block",
                "src": "11519:310:5"
              }
            ],
            "id": 1733,
            "name": "FunctionDefinition",
            "src": "11472:357:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "tryTransitionAccountingPeriod",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_ttl",
                      "scope": 1802,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1734,
                        "name": "ElementaryTypeName",
                        "src": "12347:7:5"
                      }
                    ],
                    "id": 1735,
                    "name": "VariableDeclaration",
                    "src": "12347:12:5"
                  }
                ],
                "id": 1736,
                "name": "ParameterList",
                "src": "12346:14:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "success",
                      "scope": 1802,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1737,
                        "name": "ElementaryTypeName",
                        "src": "12377:4:5"
                      }
                    ],
                    "id": 1738,
                    "name": "VariableDeclaration",
                    "src": "12377:12:5"
                  }
                ],
                "id": 1739,
                "name": "ParameterList",
                "src": "12376:14:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1741
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "currentPeriod",
                          "scope": 1802,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Period storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Period",
                              "referencedDeclaration": 1054,
                              "type": "struct Finance.Period storage pointer"
                            },
                            "id": 1740,
                            "name": "UserDefinedTypeName",
                            "src": "12401:6:5"
                          }
                        ],
                        "id": 1741,
                        "name": "VariableDeclaration",
                        "src": "12401:28:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Period storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1078,
                              "type": "struct Finance.Period storage ref[] storage ref",
                              "value": "periods"
                            },
                            "id": 1742,
                            "name": "Identifier",
                            "src": "12432:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2131,
                                  "type": "function () view returns (uint256)",
                                  "value": "currentPeriodId"
                                },
                                "id": 1743,
                                "name": "Identifier",
                                "src": "12440:15:5"
                              }
                            ],
                            "id": 1744,
                            "name": "FunctionCall",
                            "src": "12440:17:5"
                          }
                        ],
                        "id": 1745,
                        "name": "IndexAccess",
                        "src": "12432:26:5"
                      }
                    ],
                    "id": 1746,
                    "name": "VariableDeclarationStatement",
                    "src": "12401:57:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2554,
                                  "type": "function () view returns (uint256)",
                                  "value": "getTimestamp"
                                },
                                "id": 1747,
                                "name": "Identifier",
                                "src": "12472:12:5"
                              }
                            ],
                            "id": 1748,
                            "name": "FunctionCall",
                            "src": "12472:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "endTime",
                              "referencedDeclaration": 1045,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1741,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "currentPeriod"
                                },
                                "id": 1749,
                                "name": "Identifier",
                                "src": "12490:13:5"
                              }
                            ],
                            "id": 1750,
                            "name": "MemberAccess",
                            "src": "12490:21:5"
                          }
                        ],
                        "id": 1751,
                        "name": "BinaryOperation",
                        "src": "12472:39:5"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 1739
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 1752,
                            "name": "Literal",
                            "src": "12532:4:5"
                          }
                        ],
                        "id": 1753,
                        "name": "Return",
                        "src": "12525:11:5"
                      }
                    ],
                    "id": 1754,
                    "name": "IfStatement",
                    "src": "12468:68:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "firstTransactionId",
                              "referencedDeclaration": 1047,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1741,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "currentPeriod"
                                },
                                "id": 1755,
                                "name": "Identifier",
                                "src": "12766:13:5"
                              }
                            ],
                            "id": 1756,
                            "name": "MemberAccess",
                            "src": "12766:32:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1757,
                            "name": "Literal",
                            "src": "12802:1:5"
                          }
                        ],
                        "id": 1758,
                        "name": "BinaryOperation",
                        "src": "12766:37:5"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "member_name": "lastTransactionId",
                                  "referencedDeclaration": 1049,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1741,
                                      "type": "struct Finance.Period storage pointer",
                                      "value": "currentPeriod"
                                    },
                                    "id": 1759,
                                    "name": "Identifier",
                                    "src": "12817:13:5"
                                  }
                                ],
                                "id": 1761,
                                "name": "MemberAccess",
                                "src": "12817:31:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1075,
                                          "type": "struct Finance.Transaction storage ref[] storage ref",
                                          "value": "transactions"
                                        },
                                        "id": 1762,
                                        "name": "Identifier",
                                        "src": "12851:12:5"
                                      }
                                    ],
                                    "id": 1763,
                                    "name": "MemberAccess",
                                    "src": "12851:19:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 1764,
                                    "name": "Literal",
                                    "src": "12873:1:5"
                                  }
                                ],
                                "id": 1765,
                                "name": "BinaryOperation",
                                "src": "12851:23:5"
                              }
                            ],
                            "id": 1766,
                            "name": "Assignment",
                            "src": "12817:57:5"
                          }
                        ],
                        "id": 1767,
                        "name": "ExpressionStatement",
                        "src": "12817:57:5"
                      }
                    ],
                    "id": 1768,
                    "name": "IfStatement",
                    "src": "12762:112:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1770
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "newPeriod",
                          "scope": 1802,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Period storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Period",
                              "referencedDeclaration": 1054,
                              "type": "struct Finance.Period storage pointer"
                            },
                            "id": 1769,
                            "name": "UserDefinedTypeName",
                            "src": "12930:6:5"
                          }
                        ],
                        "id": 1770,
                        "name": "VariableDeclaration",
                        "src": "12930:24:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "struct Finance.Period storage pointer",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2180,
                              "type": "function (uint64) returns (struct Finance.Period storage pointer)",
                              "value": "_newPeriod"
                            },
                            "id": 1771,
                            "name": "Identifier",
                            "src": "12957:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint64",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "add",
                                  "referencedDeclaration": 12160,
                                  "type": "function (uint64,uint64) pure returns (uint64)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "endTime",
                                      "referencedDeclaration": 1045,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1741,
                                          "type": "struct Finance.Period storage pointer",
                                          "value": "currentPeriod"
                                        },
                                        "id": 1772,
                                        "name": "Identifier",
                                        "src": "12968:13:5"
                                      }
                                    ],
                                    "id": 1773,
                                    "name": "MemberAccess",
                                    "src": "12968:21:5"
                                  }
                                ],
                                "id": 1774,
                                "name": "MemberAccess",
                                "src": "12968:25:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 1775,
                                "name": "Literal",
                                "src": "12994:1:5"
                              }
                            ],
                            "id": 1776,
                            "name": "FunctionCall",
                            "src": "12968:28:5"
                          }
                        ],
                        "id": 1777,
                        "name": "FunctionCall",
                        "src": "12957:40:5"
                      }
                    ],
                    "id": 1778,
                    "name": "VariableDeclarationStatement",
                    "src": "12930:67:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2554,
                                  "type": "function () view returns (uint256)",
                                  "value": "getTimestamp"
                                },
                                "id": 1779,
                                "name": "Identifier",
                                "src": "13080:12:5"
                              }
                            ],
                            "id": 1780,
                            "name": "FunctionCall",
                            "src": "13080:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "endTime",
                              "referencedDeclaration": 1045,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1770,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "newPeriod"
                                },
                                "id": 1781,
                                "name": "Identifier",
                                "src": "13097:9:5"
                              }
                            ],
                            "id": 1782,
                            "name": "MemberAccess",
                            "src": "13097:17:5"
                          }
                        ],
                        "id": 1783,
                        "name": "BinaryOperation",
                        "src": "13080:34:5"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1735,
                                      "type": "uint256",
                                      "value": "_ttl"
                                    },
                                    "id": 1784,
                                    "name": "Identifier",
                                    "src": "13134:4:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 1785,
                                    "name": "Literal",
                                    "src": "13142:1:5"
                                  }
                                ],
                                "id": 1786,
                                "name": "BinaryOperation",
                                "src": "13134:9:5"
                              },
                              {
                                "attributes": {
                                  "functionReturnParameters": 1739
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "66616c7365",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "bool",
                                      "type": "bool",
                                      "value": "false"
                                    },
                                    "id": 1787,
                                    "name": "Literal",
                                    "src": "13168:5:5"
                                  }
                                ],
                                "id": 1788,
                                "name": "Return",
                                "src": "13161:12:5"
                              }
                            ],
                            "id": 1789,
                            "name": "IfStatement",
                            "src": "13130:43:5"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 1739
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1802,
                                      "type": "function (uint256) returns (bool)",
                                      "value": "tryTransitionAccountingPeriod"
                                    },
                                    "id": 1790,
                                    "name": "Identifier",
                                    "src": "13262:29:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sub",
                                          "referencedDeclaration": 12041,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1735,
                                              "type": "uint256",
                                              "value": "_ttl"
                                            },
                                            "id": 1791,
                                            "name": "Identifier",
                                            "src": "13292:4:5"
                                          }
                                        ],
                                        "id": 1792,
                                        "name": "MemberAccess",
                                        "src": "13292:8:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 1793,
                                        "name": "Literal",
                                        "src": "13301:1:5"
                                      }
                                    ],
                                    "id": 1794,
                                    "name": "FunctionCall",
                                    "src": "13292:11:5"
                                  }
                                ],
                                "id": 1795,
                                "name": "FunctionCall",
                                "src": "13262:42:5"
                              }
                            ],
                            "id": 1796,
                            "name": "Return",
                            "src": "13255:49:5"
                          }
                        ],
                        "id": 1797,
                        "name": "Block",
                        "src": "13116:199:5"
                      }
                    ],
                    "id": 1798,
                    "name": "IfStatement",
                    "src": "13076:239:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1739
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 1799,
                        "name": "Literal",
                        "src": "13332:4:5"
                      }
                    ],
                    "id": 1800,
                    "name": "Return",
                    "src": "13325:11:5"
                  }
                ],
                "id": 1801,
                "name": "Block",
                "src": "12391:952:5"
              }
            ],
            "id": 1802,
            "name": "FunctionDefinition",
            "src": "12308:1035:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getPayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1803,
                        "name": "ElementaryTypeName",
                        "src": "13384:7:5"
                      }
                    ],
                    "id": 1804,
                    "name": "VariableDeclaration",
                    "src": "13384:18:5"
                  }
                ],
                "id": 1805,
                "name": "ParameterList",
                "src": "13383:20:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "token",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1806,
                        "name": "UserDefinedTypeName",
                        "src": "13425:5:5"
                      }
                    ],
                    "id": 1807,
                    "name": "VariableDeclaration",
                    "src": "13425:11:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "receiver",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1808,
                        "name": "ElementaryTypeName",
                        "src": "13438:7:5"
                      }
                    ],
                    "id": 1809,
                    "name": "VariableDeclaration",
                    "src": "13438:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "amount",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1810,
                        "name": "ElementaryTypeName",
                        "src": "13456:7:5"
                      }
                    ],
                    "id": 1811,
                    "name": "VariableDeclaration",
                    "src": "13456:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "initialPaymentTime",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1812,
                        "name": "ElementaryTypeName",
                        "src": "13472:6:5"
                      }
                    ],
                    "id": 1813,
                    "name": "VariableDeclaration",
                    "src": "13472:25:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "interval",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1814,
                        "name": "ElementaryTypeName",
                        "src": "13499:6:5"
                      }
                    ],
                    "id": 1815,
                    "name": "VariableDeclaration",
                    "src": "13499:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "maxRepeats",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1816,
                        "name": "ElementaryTypeName",
                        "src": "13516:6:5"
                      }
                    ],
                    "id": 1817,
                    "name": "VariableDeclaration",
                    "src": "13516:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "reference",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 1818,
                        "name": "ElementaryTypeName",
                        "src": "13535:6:5"
                      }
                    ],
                    "id": 1819,
                    "name": "VariableDeclaration",
                    "src": "13535:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "disabled",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1820,
                        "name": "ElementaryTypeName",
                        "src": "13553:4:5"
                      }
                    ],
                    "id": 1821,
                    "name": "VariableDeclaration",
                    "src": "13553:13:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "repeats",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1822,
                        "name": "ElementaryTypeName",
                        "src": "13568:7:5"
                      }
                    ],
                    "id": 1823,
                    "name": "VariableDeclaration",
                    "src": "13568:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "createdBy",
                      "scope": 1884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1824,
                        "name": "ElementaryTypeName",
                        "src": "13585:7:5"
                      }
                    ],
                    "id": 1825,
                    "name": "VariableDeclaration",
                    "src": "13585:17:5"
                  }
                ],
                "id": 1826,
                "name": "ParameterList",
                "src": "13424:179:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1828
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "payment",
                          "scope": 1884,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Payment storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Payment",
                              "referencedDeclaration": 1019,
                              "type": "struct Finance.Payment storage pointer"
                            },
                            "id": 1827,
                            "name": "UserDefinedTypeName",
                            "src": "13614:7:5"
                          }
                        ],
                        "id": 1828,
                        "name": "VariableDeclaration",
                        "src": "13614:23:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Payment storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1072,
                              "type": "struct Finance.Payment storage ref[] storage ref",
                              "value": "payments"
                            },
                            "id": 1829,
                            "name": "Identifier",
                            "src": "13640:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1804,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 1830,
                            "name": "Identifier",
                            "src": "13649:10:5"
                          }
                        ],
                        "id": 1831,
                        "name": "IndexAccess",
                        "src": "13640:20:5"
                      }
                    ],
                    "id": 1832,
                    "name": "VariableDeclarationStatement",
                    "src": "13614:46:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ERC20"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1807,
                              "type": "contract ERC20",
                              "value": "token"
                            },
                            "id": 1833,
                            "name": "Identifier",
                            "src": "13671:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "token",
                              "referencedDeclaration": 1000,
                              "type": "contract ERC20"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1834,
                                "name": "Identifier",
                                "src": "13679:7:5"
                              }
                            ],
                            "id": 1835,
                            "name": "MemberAccess",
                            "src": "13679:13:5"
                          }
                        ],
                        "id": 1836,
                        "name": "Assignment",
                        "src": "13671:21:5"
                      }
                    ],
                    "id": 1837,
                    "name": "ExpressionStatement",
                    "src": "13671:21:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1809,
                              "type": "address",
                              "value": "receiver"
                            },
                            "id": 1838,
                            "name": "Identifier",
                            "src": "13702:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "receiver",
                              "referencedDeclaration": 1002,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1839,
                                "name": "Identifier",
                                "src": "13713:7:5"
                              }
                            ],
                            "id": 1840,
                            "name": "MemberAccess",
                            "src": "13713:16:5"
                          }
                        ],
                        "id": 1841,
                        "name": "Assignment",
                        "src": "13702:27:5"
                      }
                    ],
                    "id": 1842,
                    "name": "ExpressionStatement",
                    "src": "13702:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1811,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 1843,
                            "name": "Identifier",
                            "src": "13739:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "amount",
                              "referencedDeclaration": 1016,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1844,
                                "name": "Identifier",
                                "src": "13748:7:5"
                              }
                            ],
                            "id": 1845,
                            "name": "MemberAccess",
                            "src": "13748:14:5"
                          }
                        ],
                        "id": 1846,
                        "name": "Assignment",
                        "src": "13739:23:5"
                      }
                    ],
                    "id": 1847,
                    "name": "ExpressionStatement",
                    "src": "13739:23:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1813,
                              "type": "uint64",
                              "value": "initialPaymentTime"
                            },
                            "id": 1848,
                            "name": "Identifier",
                            "src": "13772:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "initialPaymentTime",
                              "referencedDeclaration": 1008,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1849,
                                "name": "Identifier",
                                "src": "13793:7:5"
                              }
                            ],
                            "id": 1850,
                            "name": "MemberAccess",
                            "src": "13793:26:5"
                          }
                        ],
                        "id": 1851,
                        "name": "Assignment",
                        "src": "13772:47:5"
                      }
                    ],
                    "id": 1852,
                    "name": "ExpressionStatement",
                    "src": "13772:47:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1815,
                              "type": "uint64",
                              "value": "interval"
                            },
                            "id": 1853,
                            "name": "Identifier",
                            "src": "13829:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "interval",
                              "referencedDeclaration": 1010,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1854,
                                "name": "Identifier",
                                "src": "13840:7:5"
                              }
                            ],
                            "id": 1855,
                            "name": "MemberAccess",
                            "src": "13840:16:5"
                          }
                        ],
                        "id": 1856,
                        "name": "Assignment",
                        "src": "13829:27:5"
                      }
                    ],
                    "id": 1857,
                    "name": "ExpressionStatement",
                    "src": "13829:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1817,
                              "type": "uint64",
                              "value": "maxRepeats"
                            },
                            "id": 1858,
                            "name": "Identifier",
                            "src": "13866:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "maxRepeats",
                              "referencedDeclaration": 1012,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1859,
                                "name": "Identifier",
                                "src": "13879:7:5"
                              }
                            ],
                            "id": 1860,
                            "name": "MemberAccess",
                            "src": "13879:18:5"
                          }
                        ],
                        "id": 1861,
                        "name": "Assignment",
                        "src": "13866:31:5"
                      }
                    ],
                    "id": 1862,
                    "name": "ExpressionStatement",
                    "src": "13866:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1823,
                              "type": "uint256",
                              "value": "repeats"
                            },
                            "id": 1863,
                            "name": "Identifier",
                            "src": "13907:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "repeats",
                              "referencedDeclaration": 1014,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1864,
                                "name": "Identifier",
                                "src": "13917:7:5"
                              }
                            ],
                            "id": 1865,
                            "name": "MemberAccess",
                            "src": "13917:15:5"
                          }
                        ],
                        "id": 1866,
                        "name": "Assignment",
                        "src": "13907:25:5"
                      }
                    ],
                    "id": 1867,
                    "name": "ExpressionStatement",
                    "src": "13907:25:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1821,
                              "type": "bool",
                              "value": "disabled"
                            },
                            "id": 1868,
                            "name": "Identifier",
                            "src": "13942:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "disabled",
                              "referencedDeclaration": 1006,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1869,
                                "name": "Identifier",
                                "src": "13953:7:5"
                              }
                            ],
                            "id": 1870,
                            "name": "MemberAccess",
                            "src": "13953:16:5"
                          }
                        ],
                        "id": 1871,
                        "name": "Assignment",
                        "src": "13942:27:5"
                      }
                    ],
                    "id": 1872,
                    "name": "ExpressionStatement",
                    "src": "13942:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1819,
                              "type": "string memory",
                              "value": "reference"
                            },
                            "id": 1873,
                            "name": "Identifier",
                            "src": "13979:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "reference",
                              "referencedDeclaration": 1018,
                              "type": "string storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1874,
                                "name": "Identifier",
                                "src": "13991:7:5"
                              }
                            ],
                            "id": 1875,
                            "name": "MemberAccess",
                            "src": "13991:17:5"
                          }
                        ],
                        "id": 1876,
                        "name": "Assignment",
                        "src": "13979:29:5"
                      }
                    ],
                    "id": 1877,
                    "name": "ExpressionStatement",
                    "src": "13979:29:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1825,
                              "type": "address",
                              "value": "createdBy"
                            },
                            "id": 1878,
                            "name": "Identifier",
                            "src": "14018:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "createdBy",
                              "referencedDeclaration": 1004,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1828,
                                  "type": "struct Finance.Payment storage pointer",
                                  "value": "payment"
                                },
                                "id": 1879,
                                "name": "Identifier",
                                "src": "14030:7:5"
                              }
                            ],
                            "id": 1880,
                            "name": "MemberAccess",
                            "src": "14030:17:5"
                          }
                        ],
                        "id": 1881,
                        "name": "Assignment",
                        "src": "14018:29:5"
                      }
                    ],
                    "id": 1882,
                    "name": "ExpressionStatement",
                    "src": "14018:29:5"
                  }
                ],
                "id": 1883,
                "name": "Block",
                "src": "13604:450:5"
              }
            ],
            "id": 1884,
            "name": "FunctionDefinition",
            "src": "13364:690:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getTransaction",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_transactionId",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1885,
                        "name": "ElementaryTypeName",
                        "src": "14084:7:5"
                      }
                    ],
                    "id": 1886,
                    "name": "VariableDeclaration",
                    "src": "14084:22:5"
                  }
                ],
                "id": 1887,
                "name": "ParameterList",
                "src": "14083:24:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "periodId",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1888,
                        "name": "ElementaryTypeName",
                        "src": "14129:7:5"
                      }
                    ],
                    "id": 1889,
                    "name": "VariableDeclaration",
                    "src": "14129:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "amount",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1890,
                        "name": "ElementaryTypeName",
                        "src": "14147:7:5"
                      }
                    ],
                    "id": 1891,
                    "name": "VariableDeclaration",
                    "src": "14147:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "paymentId",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1892,
                        "name": "ElementaryTypeName",
                        "src": "14163:7:5"
                      }
                    ],
                    "id": 1893,
                    "name": "VariableDeclaration",
                    "src": "14163:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "token",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 1894,
                        "name": "UserDefinedTypeName",
                        "src": "14182:5:5"
                      }
                    ],
                    "id": 1895,
                    "name": "VariableDeclaration",
                    "src": "14182:11:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "entity",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 1896,
                        "name": "ElementaryTypeName",
                        "src": "14195:7:5"
                      }
                    ],
                    "id": 1897,
                    "name": "VariableDeclaration",
                    "src": "14195:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "isIncoming",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1898,
                        "name": "ElementaryTypeName",
                        "src": "14211:4:5"
                      }
                    ],
                    "id": 1899,
                    "name": "VariableDeclaration",
                    "src": "14211:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "date",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1900,
                        "name": "ElementaryTypeName",
                        "src": "14228:6:5"
                      }
                    ],
                    "id": 1901,
                    "name": "VariableDeclaration",
                    "src": "14228:11:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "reference",
                      "scope": 1952,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 1902,
                        "name": "ElementaryTypeName",
                        "src": "14241:6:5"
                      }
                    ],
                    "id": 1903,
                    "name": "VariableDeclaration",
                    "src": "14241:16:5"
                  }
                ],
                "id": 1904,
                "name": "ParameterList",
                "src": "14128:130:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1906
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "transaction",
                          "scope": 1952,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Transaction storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Transaction",
                              "referencedDeclaration": 1036,
                              "type": "struct Finance.Transaction storage pointer"
                            },
                            "id": 1905,
                            "name": "UserDefinedTypeName",
                            "src": "14269:11:5"
                          }
                        ],
                        "id": 1906,
                        "name": "VariableDeclaration",
                        "src": "14269:31:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Transaction storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1075,
                              "type": "struct Finance.Transaction storage ref[] storage ref",
                              "value": "transactions"
                            },
                            "id": 1907,
                            "name": "Identifier",
                            "src": "14303:12:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1886,
                              "type": "uint256",
                              "value": "_transactionId"
                            },
                            "id": 1908,
                            "name": "Identifier",
                            "src": "14316:14:5"
                          }
                        ],
                        "id": 1909,
                        "name": "IndexAccess",
                        "src": "14303:28:5"
                      }
                    ],
                    "id": 1910,
                    "name": "VariableDeclarationStatement",
                    "src": "14269:62:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ERC20"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1895,
                              "type": "contract ERC20",
                              "value": "token"
                            },
                            "id": 1911,
                            "name": "Identifier",
                            "src": "14342:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "token",
                              "referencedDeclaration": 1021,
                              "type": "contract ERC20"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1912,
                                "name": "Identifier",
                                "src": "14350:11:5"
                              }
                            ],
                            "id": 1913,
                            "name": "MemberAccess",
                            "src": "14350:17:5"
                          }
                        ],
                        "id": 1914,
                        "name": "Assignment",
                        "src": "14342:25:5"
                      }
                    ],
                    "id": 1915,
                    "name": "ExpressionStatement",
                    "src": "14342:25:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1897,
                              "type": "address",
                              "value": "entity"
                            },
                            "id": 1916,
                            "name": "Identifier",
                            "src": "14377:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "entity",
                              "referencedDeclaration": 1023,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1917,
                                "name": "Identifier",
                                "src": "14386:11:5"
                              }
                            ],
                            "id": 1918,
                            "name": "MemberAccess",
                            "src": "14386:18:5"
                          }
                        ],
                        "id": 1919,
                        "name": "Assignment",
                        "src": "14377:27:5"
                      }
                    ],
                    "id": 1920,
                    "name": "ExpressionStatement",
                    "src": "14377:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1899,
                              "type": "bool",
                              "value": "isIncoming"
                            },
                            "id": 1921,
                            "name": "Identifier",
                            "src": "14414:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "isIncoming",
                              "referencedDeclaration": 1025,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1922,
                                "name": "Identifier",
                                "src": "14427:11:5"
                              }
                            ],
                            "id": 1923,
                            "name": "MemberAccess",
                            "src": "14427:22:5"
                          }
                        ],
                        "id": 1924,
                        "name": "Assignment",
                        "src": "14414:35:5"
                      }
                    ],
                    "id": 1925,
                    "name": "ExpressionStatement",
                    "src": "14414:35:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1901,
                              "type": "uint64",
                              "value": "date"
                            },
                            "id": 1926,
                            "name": "Identifier",
                            "src": "14459:4:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "date",
                              "referencedDeclaration": 1027,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1927,
                                "name": "Identifier",
                                "src": "14466:11:5"
                              }
                            ],
                            "id": 1928,
                            "name": "MemberAccess",
                            "src": "14466:16:5"
                          }
                        ],
                        "id": 1929,
                        "name": "Assignment",
                        "src": "14459:23:5"
                      }
                    ],
                    "id": 1930,
                    "name": "ExpressionStatement",
                    "src": "14459:23:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1889,
                              "type": "uint256",
                              "value": "periodId"
                            },
                            "id": 1931,
                            "name": "Identifier",
                            "src": "14492:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "periodId",
                              "referencedDeclaration": 1029,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1932,
                                "name": "Identifier",
                                "src": "14503:11:5"
                              }
                            ],
                            "id": 1933,
                            "name": "MemberAccess",
                            "src": "14503:20:5"
                          }
                        ],
                        "id": 1934,
                        "name": "Assignment",
                        "src": "14492:31:5"
                      }
                    ],
                    "id": 1935,
                    "name": "ExpressionStatement",
                    "src": "14492:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1891,
                              "type": "uint256",
                              "value": "amount"
                            },
                            "id": 1936,
                            "name": "Identifier",
                            "src": "14533:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "amount",
                              "referencedDeclaration": 1031,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1937,
                                "name": "Identifier",
                                "src": "14542:11:5"
                              }
                            ],
                            "id": 1938,
                            "name": "MemberAccess",
                            "src": "14542:18:5"
                          }
                        ],
                        "id": 1939,
                        "name": "Assignment",
                        "src": "14533:27:5"
                      }
                    ],
                    "id": 1940,
                    "name": "ExpressionStatement",
                    "src": "14533:27:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1893,
                              "type": "uint256",
                              "value": "paymentId"
                            },
                            "id": 1941,
                            "name": "Identifier",
                            "src": "14570:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "paymentId",
                              "referencedDeclaration": 1033,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1942,
                                "name": "Identifier",
                                "src": "14582:11:5"
                              }
                            ],
                            "id": 1943,
                            "name": "MemberAccess",
                            "src": "14582:21:5"
                          }
                        ],
                        "id": 1944,
                        "name": "Assignment",
                        "src": "14570:33:5"
                      }
                    ],
                    "id": 1945,
                    "name": "ExpressionStatement",
                    "src": "14570:33:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string memory"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1903,
                              "type": "string memory",
                              "value": "reference"
                            },
                            "id": 1946,
                            "name": "Identifier",
                            "src": "14613:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "reference",
                              "referencedDeclaration": 1035,
                              "type": "string storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1906,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 1947,
                                "name": "Identifier",
                                "src": "14625:11:5"
                              }
                            ],
                            "id": 1948,
                            "name": "MemberAccess",
                            "src": "14625:21:5"
                          }
                        ],
                        "id": 1949,
                        "name": "Assignment",
                        "src": "14613:33:5"
                      }
                    ],
                    "id": 1950,
                    "name": "ExpressionStatement",
                    "src": "14613:33:5"
                  }
                ],
                "id": 1951,
                "name": "Block",
                "src": "14259:394:5"
              }
            ],
            "id": 1952,
            "name": "FunctionDefinition",
            "src": "14060:593:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getPeriod",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodId",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1953,
                        "name": "ElementaryTypeName",
                        "src": "14678:7:5"
                      }
                    ],
                    "id": 1954,
                    "name": "VariableDeclaration",
                    "src": "14678:17:5"
                  }
                ],
                "id": 1955,
                "name": "ParameterList",
                "src": "14677:19:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "isCurrent",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 1956,
                        "name": "ElementaryTypeName",
                        "src": "14718:4:5"
                      }
                    ],
                    "id": 1957,
                    "name": "VariableDeclaration",
                    "src": "14718:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "startTime",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1958,
                        "name": "ElementaryTypeName",
                        "src": "14734:6:5"
                      }
                    ],
                    "id": 1959,
                    "name": "VariableDeclaration",
                    "src": "14734:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "endTime",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 1960,
                        "name": "ElementaryTypeName",
                        "src": "14752:6:5"
                      }
                    ],
                    "id": 1961,
                    "name": "VariableDeclaration",
                    "src": "14752:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "firstTransactionId",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1962,
                        "name": "ElementaryTypeName",
                        "src": "14768:7:5"
                      }
                    ],
                    "id": 1963,
                    "name": "VariableDeclaration",
                    "src": "14768:26:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "lastTransactionId",
                      "scope": 2001,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1964,
                        "name": "ElementaryTypeName",
                        "src": "14796:7:5"
                      }
                    ],
                    "id": 1965,
                    "name": "VariableDeclaration",
                    "src": "14796:25:5"
                  }
                ],
                "id": 1966,
                "name": "ParameterList",
                "src": "14717:105:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1968
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "period",
                          "scope": 2001,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Period storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Period",
                              "referencedDeclaration": 1054,
                              "type": "struct Finance.Period storage pointer"
                            },
                            "id": 1967,
                            "name": "UserDefinedTypeName",
                            "src": "14833:6:5"
                          }
                        ],
                        "id": 1968,
                        "name": "VariableDeclaration",
                        "src": "14833:21:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Period storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1078,
                              "type": "struct Finance.Period storage ref[] storage ref",
                              "value": "periods"
                            },
                            "id": 1969,
                            "name": "Identifier",
                            "src": "14857:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1954,
                              "type": "uint256",
                              "value": "_periodId"
                            },
                            "id": 1970,
                            "name": "Identifier",
                            "src": "14865:9:5"
                          }
                        ],
                        "id": 1971,
                        "name": "IndexAccess",
                        "src": "14857:18:5"
                      }
                    ],
                    "id": 1972,
                    "name": "VariableDeclarationStatement",
                    "src": "14833:42:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1957,
                              "type": "bool",
                              "value": "isCurrent"
                            },
                            "id": 1973,
                            "name": "Identifier",
                            "src": "14886:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2131,
                                      "type": "function () view returns (uint256)",
                                      "value": "currentPeriodId"
                                    },
                                    "id": 1974,
                                    "name": "Identifier",
                                    "src": "14898:15:5"
                                  }
                                ],
                                "id": 1975,
                                "name": "FunctionCall",
                                "src": "14898:17:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1954,
                                  "type": "uint256",
                                  "value": "_periodId"
                                },
                                "id": 1976,
                                "name": "Identifier",
                                "src": "14919:9:5"
                              }
                            ],
                            "id": 1977,
                            "name": "BinaryOperation",
                            "src": "14898:30:5"
                          }
                        ],
                        "id": 1978,
                        "name": "Assignment",
                        "src": "14886:42:5"
                      }
                    ],
                    "id": 1979,
                    "name": "ExpressionStatement",
                    "src": "14886:42:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1959,
                              "type": "uint64",
                              "value": "startTime"
                            },
                            "id": 1980,
                            "name": "Identifier",
                            "src": "14939:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "startTime",
                              "referencedDeclaration": 1043,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1968,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 1981,
                                "name": "Identifier",
                                "src": "14951:6:5"
                              }
                            ],
                            "id": 1982,
                            "name": "MemberAccess",
                            "src": "14951:16:5"
                          }
                        ],
                        "id": 1983,
                        "name": "Assignment",
                        "src": "14939:28:5"
                      }
                    ],
                    "id": 1984,
                    "name": "ExpressionStatement",
                    "src": "14939:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1961,
                              "type": "uint64",
                              "value": "endTime"
                            },
                            "id": 1985,
                            "name": "Identifier",
                            "src": "14977:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "endTime",
                              "referencedDeclaration": 1045,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1968,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 1986,
                                "name": "Identifier",
                                "src": "14987:6:5"
                              }
                            ],
                            "id": 1987,
                            "name": "MemberAccess",
                            "src": "14987:14:5"
                          }
                        ],
                        "id": 1988,
                        "name": "Assignment",
                        "src": "14977:24:5"
                      }
                    ],
                    "id": 1989,
                    "name": "ExpressionStatement",
                    "src": "14977:24:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1963,
                              "type": "uint256",
                              "value": "firstTransactionId"
                            },
                            "id": 1990,
                            "name": "Identifier",
                            "src": "15011:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "firstTransactionId",
                              "referencedDeclaration": 1047,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1968,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 1991,
                                "name": "Identifier",
                                "src": "15032:6:5"
                              }
                            ],
                            "id": 1992,
                            "name": "MemberAccess",
                            "src": "15032:25:5"
                          }
                        ],
                        "id": 1993,
                        "name": "Assignment",
                        "src": "15011:46:5"
                      }
                    ],
                    "id": 1994,
                    "name": "ExpressionStatement",
                    "src": "15011:46:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1965,
                              "type": "uint256",
                              "value": "lastTransactionId"
                            },
                            "id": 1995,
                            "name": "Identifier",
                            "src": "15067:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "lastTransactionId",
                              "referencedDeclaration": 1049,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1968,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 1996,
                                "name": "Identifier",
                                "src": "15087:6:5"
                              }
                            ],
                            "id": 1997,
                            "name": "MemberAccess",
                            "src": "15087:24:5"
                          }
                        ],
                        "id": 1998,
                        "name": "Assignment",
                        "src": "15067:44:5"
                      }
                    ],
                    "id": 1999,
                    "name": "ExpressionStatement",
                    "src": "15067:44:5"
                  }
                ],
                "id": 2000,
                "name": "Block",
                "src": "14823:295:5"
              }
            ],
            "id": 2001,
            "name": "FunctionDefinition",
            "src": "14659:459:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getPeriodTokenStatement",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_periodId",
                      "scope": 2028,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2002,
                        "name": "ElementaryTypeName",
                        "src": "15157:7:5"
                      }
                    ],
                    "id": 2003,
                    "name": "VariableDeclaration",
                    "src": "15157:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2028,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2004,
                        "name": "ElementaryTypeName",
                        "src": "15176:7:5"
                      }
                    ],
                    "id": 2005,
                    "name": "VariableDeclaration",
                    "src": "15176:14:5"
                  }
                ],
                "id": 2006,
                "name": "ParameterList",
                "src": "15156:35:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "expenses",
                      "scope": 2028,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2007,
                        "name": "ElementaryTypeName",
                        "src": "15213:7:5"
                      }
                    ],
                    "id": 2008,
                    "name": "VariableDeclaration",
                    "src": "15213:16:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "income",
                      "scope": 2028,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2009,
                        "name": "ElementaryTypeName",
                        "src": "15231:7:5"
                      }
                    ],
                    "id": 2010,
                    "name": "VariableDeclaration",
                    "src": "15231:14:5"
                  }
                ],
                "id": 2011,
                "name": "ParameterList",
                "src": "15212:34:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2013
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tokenStatement",
                          "scope": 2028,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.TokenStatement storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TokenStatement",
                              "referencedDeclaration": 1041,
                              "type": "struct Finance.TokenStatement storage pointer"
                            },
                            "id": 2012,
                            "name": "UserDefinedTypeName",
                            "src": "15257:14:5"
                          }
                        ],
                        "id": 2013,
                        "name": "VariableDeclaration",
                        "src": "15257:37:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.TokenStatement storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "tokenStatement",
                              "referencedDeclaration": 1053,
                              "type": "mapping(address => struct Finance.TokenStatement storage ref)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Finance.Period storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1078,
                                      "type": "struct Finance.Period storage ref[] storage ref",
                                      "value": "periods"
                                    },
                                    "id": 2014,
                                    "name": "Identifier",
                                    "src": "15297:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2003,
                                      "type": "uint256",
                                      "value": "_periodId"
                                    },
                                    "id": 2015,
                                    "name": "Identifier",
                                    "src": "15305:9:5"
                                  }
                                ],
                                "id": 2016,
                                "name": "IndexAccess",
                                "src": "15297:18:5"
                              }
                            ],
                            "id": 2017,
                            "name": "MemberAccess",
                            "src": "15297:33:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2005,
                              "type": "address",
                              "value": "_token"
                            },
                            "id": 2018,
                            "name": "Identifier",
                            "src": "15331:6:5"
                          }
                        ],
                        "id": 2019,
                        "name": "IndexAccess",
                        "src": "15297:41:5"
                      }
                    ],
                    "id": 2020,
                    "name": "VariableDeclarationStatement",
                    "src": "15257:81:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2011
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(uint256,uint256)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "expenses",
                              "referencedDeclaration": 1038,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2013,
                                  "type": "struct Finance.TokenStatement storage pointer",
                                  "value": "tokenStatement"
                                },
                                "id": 2021,
                                "name": "Identifier",
                                "src": "15356:14:5"
                              }
                            ],
                            "id": 2022,
                            "name": "MemberAccess",
                            "src": "15356:23:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "income",
                              "referencedDeclaration": 1040,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2013,
                                  "type": "struct Finance.TokenStatement storage pointer",
                                  "value": "tokenStatement"
                                },
                                "id": 2023,
                                "name": "Identifier",
                                "src": "15381:14:5"
                              }
                            ],
                            "id": 2024,
                            "name": "MemberAccess",
                            "src": "15381:21:5"
                          }
                        ],
                        "id": 2025,
                        "name": "TupleExpression",
                        "src": "15355:48:5"
                      }
                    ],
                    "id": 2026,
                    "name": "Return",
                    "src": "15348:55:5"
                  }
                ],
                "id": 2027,
                "name": "Block",
                "src": "15247:163:5"
              }
            ],
            "id": 2028,
            "name": "FunctionDefinition",
            "src": "15124:286:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "nextPaymentTime",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 2077,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2029,
                        "name": "ElementaryTypeName",
                        "src": "15441:7:5"
                      }
                    ],
                    "id": 2030,
                    "name": "VariableDeclaration",
                    "src": "15441:18:5"
                  }
                ],
                "id": 2031,
                "name": "ParameterList",
                "src": "15440:20:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2077,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 2032,
                        "name": "ElementaryTypeName",
                        "src": "15482:6:5"
                      }
                    ],
                    "id": 2033,
                    "name": "VariableDeclaration",
                    "src": "15482:6:5"
                  }
                ],
                "id": 2034,
                "name": "ParameterList",
                "src": "15481:8:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2036
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "payment",
                          "scope": 2077,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Finance.Payment memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Payment",
                              "referencedDeclaration": 1019,
                              "type": "struct Finance.Payment storage pointer"
                            },
                            "id": 2035,
                            "name": "UserDefinedTypeName",
                            "src": "15500:7:5"
                          }
                        ],
                        "id": 2036,
                        "name": "VariableDeclaration",
                        "src": "15500:22:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Payment storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1072,
                              "type": "struct Finance.Payment storage ref[] storage ref",
                              "value": "payments"
                            },
                            "id": 2037,
                            "name": "Identifier",
                            "src": "15525:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2030,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 2038,
                            "name": "Identifier",
                            "src": "15534:10:5"
                          }
                        ],
                        "id": 2039,
                        "name": "IndexAccess",
                        "src": "15525:20:5"
                      }
                    ],
                    "id": 2040,
                    "name": "VariableDeclarationStatement",
                    "src": "15500:45:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "repeats",
                              "referencedDeclaration": 1014,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2036,
                                  "type": "struct Finance.Payment memory",
                                  "value": "payment"
                                },
                                "id": 2041,
                                "name": "Identifier",
                                "src": "15560:7:5"
                              }
                            ],
                            "id": 2042,
                            "name": "MemberAccess",
                            "src": "15560:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "maxRepeats",
                              "referencedDeclaration": 1012,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2036,
                                  "type": "struct Finance.Payment memory",
                                  "value": "payment"
                                },
                                "id": 2043,
                                "name": "Identifier",
                                "src": "15579:7:5"
                              }
                            ],
                            "id": 2044,
                            "name": "MemberAccess",
                            "src": "15579:18:5"
                          }
                        ],
                        "id": 2045,
                        "name": "BinaryOperation",
                        "src": "15560:37:5"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 2034
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 967,
                              "type": "uint64",
                              "value": "MAX_UINT64"
                            },
                            "id": 2046,
                            "name": "Identifier",
                            "src": "15618:10:5"
                          }
                        ],
                        "id": 2047,
                        "name": "Return",
                        "src": "15611:17:5"
                      }
                    ],
                    "id": 2048,
                    "name": "IfStatement",
                    "src": "15556:72:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2050
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "increase",
                          "scope": 2077,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2049,
                            "name": "ElementaryTypeName",
                            "src": "15777:7:5"
                          }
                        ],
                        "id": 2050,
                        "name": "VariableDeclaration",
                        "src": "15777:16:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mul",
                              "referencedDeclaration": 12003,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)",
                                      "value": "uint256"
                                    },
                                    "id": 2051,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "15796:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "repeats",
                                      "referencedDeclaration": 1014,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2036,
                                          "type": "struct Finance.Payment memory",
                                          "value": "payment"
                                        },
                                        "id": 2052,
                                        "name": "Identifier",
                                        "src": "15804:7:5"
                                      }
                                    ],
                                    "id": 2053,
                                    "name": "MemberAccess",
                                    "src": "15804:15:5"
                                  }
                                ],
                                "id": 2054,
                                "name": "FunctionCall",
                                "src": "15796:24:5"
                              }
                            ],
                            "id": 2055,
                            "name": "MemberAccess",
                            "src": "15796:28:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 2056,
                                "name": "ElementaryTypeNameExpression",
                                "src": "15825:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "interval",
                                  "referencedDeclaration": 1010,
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2036,
                                      "type": "struct Finance.Payment memory",
                                      "value": "payment"
                                    },
                                    "id": 2057,
                                    "name": "Identifier",
                                    "src": "15833:7:5"
                                  }
                                ],
                                "id": 2058,
                                "name": "MemberAccess",
                                "src": "15833:16:5"
                              }
                            ],
                            "id": 2059,
                            "name": "FunctionCall",
                            "src": "15825:25:5"
                          }
                        ],
                        "id": 2060,
                        "name": "FunctionCall",
                        "src": "15796:55:5"
                      }
                    ],
                    "id": 2061,
                    "name": "VariableDeclarationStatement",
                    "src": "15777:74:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2063
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "nextPayment",
                          "scope": 2077,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2062,
                            "name": "ElementaryTypeName",
                            "src": "15861:7:5"
                          }
                        ],
                        "id": 2063,
                        "name": "VariableDeclaration",
                        "src": "15861:19:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 12065,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(uint256)",
                                      "value": "uint256"
                                    },
                                    "id": 2064,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "15883:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "initialPaymentTime",
                                      "referencedDeclaration": 1008,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2036,
                                          "type": "struct Finance.Payment memory",
                                          "value": "payment"
                                        },
                                        "id": 2065,
                                        "name": "Identifier",
                                        "src": "15891:7:5"
                                      }
                                    ],
                                    "id": 2066,
                                    "name": "MemberAccess",
                                    "src": "15891:26:5"
                                  }
                                ],
                                "id": 2067,
                                "name": "FunctionCall",
                                "src": "15883:35:5"
                              }
                            ],
                            "id": 2068,
                            "name": "MemberAccess",
                            "src": "15883:39:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2050,
                              "type": "uint256",
                              "value": "increase"
                            },
                            "id": 2069,
                            "name": "Identifier",
                            "src": "15923:8:5"
                          }
                        ],
                        "id": 2070,
                        "name": "FunctionCall",
                        "src": "15883:49:5"
                      }
                    ],
                    "id": 2071,
                    "name": "VariableDeclarationStatement",
                    "src": "15861:71:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2034
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint64",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint64)",
                              "value": "uint64"
                            },
                            "id": 2072,
                            "name": "ElementaryTypeNameExpression",
                            "src": "15949:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2063,
                              "type": "uint256",
                              "value": "nextPayment"
                            },
                            "id": 2073,
                            "name": "Identifier",
                            "src": "15956:11:5"
                          }
                        ],
                        "id": 2074,
                        "name": "FunctionCall",
                        "src": "15949:19:5"
                      }
                    ],
                    "id": 2075,
                    "name": "Return",
                    "src": "15942:26:5"
                  }
                ],
                "id": 2076,
                "name": "Block",
                "src": "15490:485:5"
              }
            ],
            "id": 2077,
            "name": "FunctionDefinition",
            "src": "15416:559:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getPeriodDuration",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2078,
                "name": "ParameterList",
                "src": "16007:2:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "periodDuration",
                      "scope": 2086,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 2079,
                        "name": "ElementaryTypeName",
                        "src": "16031:6:5"
                      }
                    ],
                    "id": 2080,
                    "name": "VariableDeclaration",
                    "src": "16031:21:5"
                  }
                ],
                "id": 2081,
                "name": "ParameterList",
                "src": "16030:23:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2081
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "periodDuration",
                          "referencedDeclaration": 1056,
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1080,
                              "type": "struct Finance.Settings storage ref",
                              "value": "settings"
                            },
                            "id": 2082,
                            "name": "Identifier",
                            "src": "16071:8:5"
                          }
                        ],
                        "id": 2083,
                        "name": "MemberAccess",
                        "src": "16071:23:5"
                      }
                    ],
                    "id": 2084,
                    "name": "Return",
                    "src": "16064:30:5"
                  }
                ],
                "id": 2085,
                "name": "Block",
                "src": "16054:47:5"
              }
            ],
            "id": 2086,
            "name": "FunctionDefinition",
            "src": "15981:120:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "getBudget",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2120,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2087,
                        "name": "ElementaryTypeName",
                        "src": "16126:7:5"
                      }
                    ],
                    "id": 2088,
                    "name": "VariableDeclaration",
                    "src": "16126:14:5"
                  }
                ],
                "id": 2089,
                "name": "ParameterList",
                "src": "16125:16:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "budget",
                      "scope": 2120,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2092,
                        "name": "ElementaryTypeName",
                        "src": "16176:7:5"
                      }
                    ],
                    "id": 2093,
                    "name": "VariableDeclaration",
                    "src": "16176:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "hasBudget",
                      "scope": 2120,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2094,
                        "name": "ElementaryTypeName",
                        "src": "16192:4:5"
                      }
                    ],
                    "id": 2095,
                    "name": "VariableDeclaration",
                    "src": "16192:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "remainingBudget",
                      "scope": 2120,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2096,
                        "name": "ElementaryTypeName",
                        "src": "16208:7:5"
                      }
                    ],
                    "id": 2097,
                    "name": "VariableDeclaration",
                    "src": "16208:23:5"
                  }
                ],
                "id": 2098,
                "name": "ParameterList",
                "src": "16175:57:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 2090,
                    "name": "Identifier",
                    "src": "16142:17:5"
                  }
                ],
                "id": 2091,
                "name": "ModifierInvocation",
                "src": "16142:17:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2093,
                              "type": "uint256",
                              "value": "budget"
                            },
                            "id": 2099,
                            "name": "Identifier",
                            "src": "16243:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "budgets",
                                  "referencedDeclaration": 1060,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 2100,
                                    "name": "Identifier",
                                    "src": "16252:8:5"
                                  }
                                ],
                                "id": 2101,
                                "name": "MemberAccess",
                                "src": "16252:16:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2088,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2102,
                                "name": "Identifier",
                                "src": "16269:6:5"
                              }
                            ],
                            "id": 2103,
                            "name": "IndexAccess",
                            "src": "16252:24:5"
                          }
                        ],
                        "id": 2104,
                        "name": "Assignment",
                        "src": "16243:33:5"
                      }
                    ],
                    "id": 2105,
                    "name": "ExpressionStatement",
                    "src": "16243:33:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2095,
                              "type": "bool",
                              "value": "hasBudget"
                            },
                            "id": 2106,
                            "name": "Identifier",
                            "src": "16286:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hasBudget",
                                  "referencedDeclaration": 1064,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 2107,
                                    "name": "Identifier",
                                    "src": "16298:8:5"
                                  }
                                ],
                                "id": 2108,
                                "name": "MemberAccess",
                                "src": "16298:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2088,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2109,
                                "name": "Identifier",
                                "src": "16317:6:5"
                              }
                            ],
                            "id": 2110,
                            "name": "IndexAccess",
                            "src": "16298:26:5"
                          }
                        ],
                        "id": 2111,
                        "name": "Assignment",
                        "src": "16286:38:5"
                      }
                    ],
                    "id": 2112,
                    "name": "ExpressionStatement",
                    "src": "16286:38:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2097,
                              "type": "uint256",
                              "value": "remainingBudget"
                            },
                            "id": 2113,
                            "name": "Identifier",
                            "src": "16334:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2546,
                                  "type": "function (address) view returns (uint256)",
                                  "value": "_getRemainingBudget"
                                },
                                "id": 2114,
                                "name": "Identifier",
                                "src": "16352:19:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2088,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2115,
                                "name": "Identifier",
                                "src": "16372:6:5"
                              }
                            ],
                            "id": 2116,
                            "name": "FunctionCall",
                            "src": "16352:27:5"
                          }
                        ],
                        "id": 2117,
                        "name": "Assignment",
                        "src": "16334:45:5"
                      }
                    ],
                    "id": 2118,
                    "name": "ExpressionStatement",
                    "src": "16334:45:5"
                  }
                ],
                "id": 2119,
                "name": "Block",
                "src": "16233:153:5"
              }
            ],
            "id": 2120,
            "name": "FunctionDefinition",
            "src": "16107:279:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "currentPeriodId",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2121,
                "name": "ParameterList",
                "src": "16416:2:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2131,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2122,
                        "name": "ElementaryTypeName",
                        "src": "16440:7:5"
                      }
                    ],
                    "id": 2123,
                    "name": "VariableDeclaration",
                    "src": "16440:7:5"
                  }
                ],
                "id": 2124,
                "name": "ParameterList",
                "src": "16439:9:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2124
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "-",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1078,
                                  "type": "struct Finance.Period storage ref[] storage ref",
                                  "value": "periods"
                                },
                                "id": 2125,
                                "name": "Identifier",
                                "src": "16466:7:5"
                              }
                            ],
                            "id": 2126,
                            "name": "MemberAccess",
                            "src": "16466:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "31",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 1",
                              "value": "1"
                            },
                            "id": 2127,
                            "name": "Literal",
                            "src": "16483:1:5"
                          }
                        ],
                        "id": 2128,
                        "name": "BinaryOperation",
                        "src": "16466:18:5"
                      }
                    ],
                    "id": 2129,
                    "name": "Return",
                    "src": "16459:25:5"
                  }
                ],
                "id": 2130,
                "name": "Block",
                "src": "16449:42:5"
              }
            ],
            "id": 2131,
            "name": "FunctionDefinition",
            "src": "16392:99:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_newPeriod",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_startTime",
                      "scope": 2180,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 2132,
                        "name": "ElementaryTypeName",
                        "src": "16538:6:5"
                      }
                    ],
                    "id": 2133,
                    "name": "VariableDeclaration",
                    "src": "16538:17:5"
                  }
                ],
                "id": 2134,
                "name": "ParameterList",
                "src": "16537:19:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2180,
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "type": "struct Finance.Period storage pointer",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Period",
                          "referencedDeclaration": 1054,
                          "type": "struct Finance.Period storage pointer"
                        },
                        "id": 2135,
                        "name": "UserDefinedTypeName",
                        "src": "16575:6:5"
                      }
                    ],
                    "id": 2136,
                    "name": "VariableDeclaration",
                    "src": "16575:6:5"
                  }
                ],
                "id": 2137,
                "name": "ParameterList",
                "src": "16574:16:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2139
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "newPeriodId",
                          "scope": 2180,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2138,
                            "name": "ElementaryTypeName",
                            "src": "16601:7:5"
                          }
                        ],
                        "id": 2139,
                        "name": "VariableDeclaration",
                        "src": "16601:19:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "++",
                          "prefix": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1078,
                                  "type": "struct Finance.Period storage ref[] storage ref",
                                  "value": "periods"
                                },
                                "id": 2140,
                                "name": "Identifier",
                                "src": "16623:7:5"
                              }
                            ],
                            "id": 2141,
                            "name": "MemberAccess",
                            "src": "16623:14:5"
                          }
                        ],
                        "id": 2142,
                        "name": "UnaryOperation",
                        "src": "16623:16:5"
                      }
                    ],
                    "id": 2143,
                    "name": "VariableDeclarationStatement",
                    "src": "16601:38:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2145
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "period",
                          "scope": 2180,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Period storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Period",
                              "referencedDeclaration": 1054,
                              "type": "struct Finance.Period storage pointer"
                            },
                            "id": 2144,
                            "name": "UserDefinedTypeName",
                            "src": "16650:6:5"
                          }
                        ],
                        "id": 2145,
                        "name": "VariableDeclaration",
                        "src": "16650:21:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Period storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1078,
                              "type": "struct Finance.Period storage ref[] storage ref",
                              "value": "periods"
                            },
                            "id": 2146,
                            "name": "Identifier",
                            "src": "16674:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2139,
                              "type": "uint256",
                              "value": "newPeriodId"
                            },
                            "id": 2147,
                            "name": "Identifier",
                            "src": "16682:11:5"
                          }
                        ],
                        "id": 2148,
                        "name": "IndexAccess",
                        "src": "16674:20:5"
                      }
                    ],
                    "id": 2149,
                    "name": "VariableDeclarationStatement",
                    "src": "16650:44:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "startTime",
                              "referencedDeclaration": 1043,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2145,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 2150,
                                "name": "Identifier",
                                "src": "16704:6:5"
                              }
                            ],
                            "id": 2152,
                            "name": "MemberAccess",
                            "src": "16704:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2133,
                              "type": "uint64",
                              "value": "_startTime"
                            },
                            "id": 2153,
                            "name": "Identifier",
                            "src": "16723:10:5"
                          }
                        ],
                        "id": 2154,
                        "name": "Assignment",
                        "src": "16704:29:5"
                      }
                    ],
                    "id": 2155,
                    "name": "ExpressionStatement",
                    "src": "16704:29:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "endTime",
                              "referencedDeclaration": 1045,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2145,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 2156,
                                "name": "Identifier",
                                "src": "16795:6:5"
                              }
                            ],
                            "id": 2158,
                            "name": "MemberAccess",
                            "src": "16795:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint64",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sub",
                                  "referencedDeclaration": 12136,
                                  "type": "function (uint64,uint64) pure returns (uint64)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint64",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "add",
                                          "referencedDeclaration": 12160,
                                          "type": "function (uint64,uint64) pure returns (uint64)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2133,
                                              "type": "uint64",
                                              "value": "_startTime"
                                            },
                                            "id": 2159,
                                            "name": "Identifier",
                                            "src": "16812:10:5"
                                          }
                                        ],
                                        "id": 2160,
                                        "name": "MemberAccess",
                                        "src": "16812:14:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "periodDuration",
                                          "referencedDeclaration": 1056,
                                          "type": "uint64"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1080,
                                              "type": "struct Finance.Settings storage ref",
                                              "value": "settings"
                                            },
                                            "id": 2161,
                                            "name": "Identifier",
                                            "src": "16827:8:5"
                                          }
                                        ],
                                        "id": 2162,
                                        "name": "MemberAccess",
                                        "src": "16827:23:5"
                                      }
                                    ],
                                    "id": 2163,
                                    "name": "FunctionCall",
                                    "src": "16812:39:5"
                                  }
                                ],
                                "id": 2164,
                                "name": "MemberAccess",
                                "src": "16812:43:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 2165,
                                "name": "Literal",
                                "src": "16856:1:5"
                              }
                            ],
                            "id": 2166,
                            "name": "FunctionCall",
                            "src": "16812:46:5"
                          }
                        ],
                        "id": 2167,
                        "name": "Assignment",
                        "src": "16795:63:5"
                      }
                    ],
                    "id": 2168,
                    "name": "ExpressionStatement",
                    "src": "16795:63:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                },
                                {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1088,
                              "type": "function (uint256,uint64,uint64)",
                              "value": "NewPeriod"
                            },
                            "id": 2169,
                            "name": "Identifier",
                            "src": "16869:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2139,
                              "type": "uint256",
                              "value": "newPeriodId"
                            },
                            "id": 2170,
                            "name": "Identifier",
                            "src": "16879:11:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "startTime",
                              "referencedDeclaration": 1043,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2145,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 2171,
                                "name": "Identifier",
                                "src": "16892:6:5"
                              }
                            ],
                            "id": 2172,
                            "name": "MemberAccess",
                            "src": "16892:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "endTime",
                              "referencedDeclaration": 1045,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2145,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 2173,
                                "name": "Identifier",
                                "src": "16910:6:5"
                              }
                            ],
                            "id": 2174,
                            "name": "MemberAccess",
                            "src": "16910:14:5"
                          }
                        ],
                        "id": 2175,
                        "name": "FunctionCall",
                        "src": "16869:56:5"
                      }
                    ],
                    "id": 2176,
                    "name": "ExpressionStatement",
                    "src": "16869:56:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2137
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2145,
                          "type": "struct Finance.Period storage pointer",
                          "value": "period"
                        },
                        "id": 2177,
                        "name": "Identifier",
                        "src": "16943:6:5"
                      }
                    ],
                    "id": 2178,
                    "name": "Return",
                    "src": "16936:13:5"
                  }
                ],
                "id": 2179,
                "name": "Block",
                "src": "16591:365:5"
              }
            ],
            "id": 2180,
            "name": "FunctionDefinition",
            "src": "16518:438:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "_executePayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 2250,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2181,
                        "name": "ElementaryTypeName",
                        "src": "16987:7:5"
                      }
                    ],
                    "id": 2182,
                    "name": "VariableDeclaration",
                    "src": "16987:18:5"
                  }
                ],
                "id": 2183,
                "name": "ParameterList",
                "src": "16986:20:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2186,
                "name": "ParameterList",
                "src": "17034:0:5"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1140,
                      "type": "modifier ()",
                      "value": "transitionsPeriod"
                    },
                    "id": 2184,
                    "name": "Identifier",
                    "src": "17007:17:5"
                  }
                ],
                "id": 2185,
                "name": "ModifierInvocation",
                "src": "17007:17:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2188
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "payment",
                          "scope": 2250,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Payment storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Payment",
                              "referencedDeclaration": 1019,
                              "type": "struct Finance.Payment storage pointer"
                            },
                            "id": 2187,
                            "name": "UserDefinedTypeName",
                            "src": "17044:7:5"
                          }
                        ],
                        "id": 2188,
                        "name": "VariableDeclaration",
                        "src": "17044:23:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Payment storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1072,
                              "type": "struct Finance.Payment storage ref[] storage ref",
                              "value": "payments"
                            },
                            "id": 2189,
                            "name": "Identifier",
                            "src": "17070:8:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2182,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 2190,
                            "name": "Identifier",
                            "src": "17079:10:5"
                          }
                        ],
                        "id": 2191,
                        "name": "IndexAccess",
                        "src": "17070:20:5"
                      }
                    ],
                    "id": 2192,
                    "name": "VariableDeclarationStatement",
                    "src": "17044:46:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 2193,
                            "name": "Identifier",
                            "src": "17100:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "disabled",
                                  "referencedDeclaration": 1006,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2188,
                                      "type": "struct Finance.Payment storage pointer",
                                      "value": "payment"
                                    },
                                    "id": 2194,
                                    "name": "Identifier",
                                    "src": "17109:7:5"
                                  }
                                ],
                                "id": 2195,
                                "name": "MemberAccess",
                                "src": "17109:16:5"
                              }
                            ],
                            "id": 2196,
                            "name": "UnaryOperation",
                            "src": "17108:17:5"
                          }
                        ],
                        "id": 2197,
                        "name": "FunctionCall",
                        "src": "17100:26:5"
                      }
                    ],
                    "id": 2198,
                    "name": "ExpressionStatement",
                    "src": "17100:26:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2200
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "payed",
                          "scope": 2250,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint64",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint64",
                              "type": "uint64"
                            },
                            "id": 2199,
                            "name": "ElementaryTypeName",
                            "src": "17137:6:5"
                          }
                        ],
                        "id": 2200,
                        "name": "VariableDeclaration",
                        "src": "17137:12:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 2201,
                        "name": "Literal",
                        "src": "17152:1:5"
                      }
                    ],
                    "id": 2202,
                    "name": "VariableDeclarationStatement",
                    "src": "17137:16:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint64",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2077,
                                      "type": "function (uint256) view returns (uint64)",
                                      "value": "nextPaymentTime"
                                    },
                                    "id": 2203,
                                    "name": "Identifier",
                                    "src": "17170:15:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2182,
                                      "type": "uint256",
                                      "value": "_paymentId"
                                    },
                                    "id": 2204,
                                    "name": "Identifier",
                                    "src": "17186:10:5"
                                  }
                                ],
                                "id": 2205,
                                "name": "FunctionCall",
                                "src": "17170:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 2206,
                                    "name": "Identifier",
                                    "src": "17201:12:5"
                                  }
                                ],
                                "id": 2207,
                                "name": "FunctionCall",
                                "src": "17201:14:5"
                              }
                            ],
                            "id": 2208,
                            "name": "BinaryOperation",
                            "src": "17170:45:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2200,
                                  "type": "uint64",
                                  "value": "payed"
                                },
                                "id": 2209,
                                "name": "Identifier",
                                "src": "17219:5:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 958,
                                  "type": "uint64",
                                  "value": "MAX_PAYMENTS_PER_TX"
                                },
                                "id": 2210,
                                "name": "Identifier",
                                "src": "17227:19:5"
                              }
                            ],
                            "id": 2211,
                            "name": "BinaryOperation",
                            "src": "17219:27:5"
                          }
                        ],
                        "id": 2212,
                        "name": "BinaryOperation",
                        "src": "17170:76:5"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_ERC20_$12300",
                                              "typeString": "contract ERC20"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2502,
                                          "type": "function (contract ERC20,uint256) view returns (bool)",
                                          "value": "_canMakePayment"
                                        },
                                        "id": 2213,
                                        "name": "Identifier",
                                        "src": "17267:15:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "token",
                                          "referencedDeclaration": 1000,
                                          "type": "contract ERC20"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2188,
                                              "type": "struct Finance.Payment storage pointer",
                                              "value": "payment"
                                            },
                                            "id": 2214,
                                            "name": "Identifier",
                                            "src": "17283:7:5"
                                          }
                                        ],
                                        "id": 2215,
                                        "name": "MemberAccess",
                                        "src": "17283:13:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "amount",
                                          "referencedDeclaration": 1016,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2188,
                                              "type": "struct Finance.Payment storage pointer",
                                              "value": "payment"
                                            },
                                            "id": 2216,
                                            "name": "Identifier",
                                            "src": "17298:7:5"
                                          }
                                        ],
                                        "id": 2217,
                                        "name": "MemberAccess",
                                        "src": "17298:14:5"
                                      }
                                    ],
                                    "id": 2218,
                                    "name": "FunctionCall",
                                    "src": "17267:46:5"
                                  }
                                ],
                                "id": 2219,
                                "name": "UnaryOperation",
                                "src": "17266:47:5"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "tuple()",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 1126,
                                              "type": "function (uint256)",
                                              "value": "PaymentFailure"
                                            },
                                            "id": 2220,
                                            "name": "Identifier",
                                            "src": "17333:14:5"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2182,
                                              "type": "uint256",
                                              "value": "_paymentId"
                                            },
                                            "id": 2221,
                                            "name": "Identifier",
                                            "src": "17348:10:5"
                                          }
                                        ],
                                        "id": 2222,
                                        "name": "FunctionCall",
                                        "src": "17333:26:5"
                                      }
                                    ],
                                    "id": 2223,
                                    "name": "ExpressionStatement",
                                    "src": "17333:26:5"
                                  },
                                  {
                                    "attributes": {
                                      "expression": null,
                                      "functionReturnParameters": 2186
                                    },
                                    "id": 2224,
                                    "name": "Return",
                                    "src": "17377:7:5"
                                  }
                                ],
                                "id": 2225,
                                "name": "Block",
                                "src": "17315:83:5"
                              }
                            ],
                            "id": 2226,
                            "name": "IfStatement",
                            "src": "17262:136:5"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "repeats",
                                      "referencedDeclaration": 1014,
                                      "type": "uint64"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2188,
                                          "type": "struct Finance.Payment storage pointer",
                                          "value": "payment"
                                        },
                                        "id": 2227,
                                        "name": "Identifier",
                                        "src": "17412:7:5"
                                      }
                                    ],
                                    "id": 2229,
                                    "name": "MemberAccess",
                                    "src": "17412:15:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 2230,
                                    "name": "Literal",
                                    "src": "17431:1:5"
                                  }
                                ],
                                "id": 2231,
                                "name": "Assignment",
                                "src": "17412:20:5"
                              }
                            ],
                            "id": 2232,
                            "name": "ExpressionStatement",
                            "src": "17412:20:5"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint64"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2200,
                                      "type": "uint64",
                                      "value": "payed"
                                    },
                                    "id": 2233,
                                    "name": "Identifier",
                                    "src": "17446:5:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 2234,
                                    "name": "Literal",
                                    "src": "17455:1:5"
                                  }
                                ],
                                "id": 2235,
                                "name": "Assignment",
                                "src": "17446:10:5"
                              }
                            ],
                            "id": 2236,
                            "name": "ExpressionStatement",
                            "src": "17446:10:5"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2314,
                                      "type": "function (contract ERC20,address,uint256,uint256)",
                                      "value": "_makePaymentTransaction"
                                    },
                                    "id": 2237,
                                    "name": "Identifier",
                                    "src": "17471:23:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "token",
                                      "referencedDeclaration": 1000,
                                      "type": "contract ERC20"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2188,
                                          "type": "struct Finance.Payment storage pointer",
                                          "value": "payment"
                                        },
                                        "id": 2238,
                                        "name": "Identifier",
                                        "src": "17512:7:5"
                                      }
                                    ],
                                    "id": 2239,
                                    "name": "MemberAccess",
                                    "src": "17512:13:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "receiver",
                                      "referencedDeclaration": 1002,
                                      "type": "address"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2188,
                                          "type": "struct Finance.Payment storage pointer",
                                          "value": "payment"
                                        },
                                        "id": 2240,
                                        "name": "Identifier",
                                        "src": "17543:7:5"
                                      }
                                    ],
                                    "id": 2241,
                                    "name": "MemberAccess",
                                    "src": "17543:16:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "amount",
                                      "referencedDeclaration": 1016,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2188,
                                          "type": "struct Finance.Payment storage pointer",
                                          "value": "payment"
                                        },
                                        "id": 2242,
                                        "name": "Identifier",
                                        "src": "17577:7:5"
                                      }
                                    ],
                                    "id": 2243,
                                    "name": "MemberAccess",
                                    "src": "17577:14:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2182,
                                      "type": "uint256",
                                      "value": "_paymentId"
                                    },
                                    "id": 2244,
                                    "name": "Identifier",
                                    "src": "17609:10:5"
                                  }
                                ],
                                "id": 2245,
                                "name": "FunctionCall",
                                "src": "17471:162:5"
                              }
                            ],
                            "id": 2246,
                            "name": "ExpressionStatement",
                            "src": "17471:162:5"
                          }
                        ],
                        "id": 2247,
                        "name": "Block",
                        "src": "17248:396:5"
                      }
                    ],
                    "id": 2248,
                    "name": "WhileStatement",
                    "src": "17163:481:5"
                  }
                ],
                "id": 2249,
                "name": "Block",
                "src": "17034:616:5"
              }
            ],
            "id": 2250,
            "name": "FunctionDefinition",
            "src": "16962:688:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_makePaymentTransaction",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2314,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 2251,
                        "name": "UserDefinedTypeName",
                        "src": "17698:5:5"
                      }
                    ],
                    "id": 2252,
                    "name": "VariableDeclaration",
                    "src": "17698:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_receiver",
                      "scope": 2314,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2253,
                        "name": "ElementaryTypeName",
                        "src": "17720:7:5"
                      }
                    ],
                    "id": 2254,
                    "name": "VariableDeclaration",
                    "src": "17720:17:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 2314,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2255,
                        "name": "ElementaryTypeName",
                        "src": "17747:7:5"
                      }
                    ],
                    "id": 2256,
                    "name": "VariableDeclaration",
                    "src": "17747:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 2314,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2257,
                        "name": "ElementaryTypeName",
                        "src": "17772:7:5"
                      }
                    ],
                    "id": 2258,
                    "name": "VariableDeclaration",
                    "src": "17772:18:5"
                  }
                ],
                "id": 2259,
                "name": "ParameterList",
                "src": "17688:112:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2260,
                "name": "ParameterList",
                "src": "17814:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 2261,
                            "name": "Identifier",
                            "src": "17824:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2546,
                                      "type": "function (address) view returns (uint256)",
                                      "value": "_getRemainingBudget"
                                    },
                                    "id": 2262,
                                    "name": "Identifier",
                                    "src": "17832:19:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2252,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 2263,
                                    "name": "Identifier",
                                    "src": "17852:6:5"
                                  }
                                ],
                                "id": 2264,
                                "name": "FunctionCall",
                                "src": "17832:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2256,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 2265,
                                "name": "Identifier",
                                "src": "17863:7:5"
                              }
                            ],
                            "id": 2266,
                            "name": "BinaryOperation",
                            "src": "17832:38:5"
                          }
                        ],
                        "id": 2267,
                        "name": "FunctionCall",
                        "src": "17824:47:5"
                      }
                    ],
                    "id": 2268,
                    "name": "ExpressionStatement",
                    "src": "17824:47:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2477,
                              "type": "function (bool,contract ERC20,address,uint256,uint256,string memory)",
                              "value": "_recordTransaction"
                            },
                            "id": 2269,
                            "name": "Identifier",
                            "src": "17881:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 2270,
                            "name": "Literal",
                            "src": "17913:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2252,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 2271,
                            "name": "Identifier",
                            "src": "17932:6:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2254,
                              "type": "address",
                              "value": "_receiver"
                            },
                            "id": 2272,
                            "name": "Identifier",
                            "src": "17952:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2256,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 2273,
                            "name": "Identifier",
                            "src": "17975:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2258,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 2274,
                            "name": "Identifier",
                            "src": "17996:10:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 2275,
                            "name": "Literal",
                            "src": "18020:2:5"
                          }
                        ],
                        "id": 2276,
                        "name": "FunctionCall",
                        "src": "17881:151:5"
                      }
                    ],
                    "id": 2277,
                    "name": "ExpressionStatement",
                    "src": "17881:151:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ERC20_$12300",
                                      "typeString": "contract ERC20"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 2278,
                                "name": "ElementaryTypeNameExpression",
                                "src": "18047:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2252,
                                  "type": "contract ERC20",
                                  "value": "_token"
                                },
                                "id": 2279,
                                "name": "Identifier",
                                "src": "18055:6:5"
                              }
                            ],
                            "id": 2280,
                            "name": "FunctionCall",
                            "src": "18047:15:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_EtherToken_$7195",
                                      "typeString": "contract EtherToken"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 2281,
                                "name": "ElementaryTypeNameExpression",
                                "src": "18066:7:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1069,
                                  "type": "contract EtherToken",
                                  "value": "etherToken"
                                },
                                "id": 2282,
                                "name": "Identifier",
                                "src": "18074:10:5"
                              }
                            ],
                            "id": 2283,
                            "name": "FunctionCall",
                            "src": "18066:19:5"
                          }
                        ],
                        "id": 2284,
                        "name": "BinaryOperation",
                        "src": "18047:38:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferTokens",
                                      "referencedDeclaration": 3518,
                                      "type": "function (contract ERC20,address,uint256) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1067,
                                          "type": "contract Vault",
                                          "value": "vault"
                                        },
                                        "id": 2285,
                                        "name": "Identifier",
                                        "src": "18101:5:5"
                                      }
                                    ],
                                    "id": 2287,
                                    "name": "MemberAccess",
                                    "src": "18101:20:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2252,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 2288,
                                    "name": "Identifier",
                                    "src": "18122:6:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2254,
                                      "type": "address",
                                      "value": "_receiver"
                                    },
                                    "id": 2289,
                                    "name": "Identifier",
                                    "src": "18130:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2256,
                                      "type": "uint256",
                                      "value": "_amount"
                                    },
                                    "id": 2290,
                                    "name": "Identifier",
                                    "src": "18141:7:5"
                                  }
                                ],
                                "id": 2291,
                                "name": "FunctionCall",
                                "src": "18101:48:5"
                              }
                            ],
                            "id": 2292,
                            "name": "ExpressionStatement",
                            "src": "18101:48:5"
                          }
                        ],
                        "id": 2293,
                        "name": "Block",
                        "src": "18087:73:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferTokens",
                                      "referencedDeclaration": 3518,
                                      "type": "function (contract ERC20,address,uint256) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1067,
                                          "type": "contract Vault",
                                          "value": "vault"
                                        },
                                        "id": 2294,
                                        "name": "Identifier",
                                        "src": "18180:5:5"
                                      }
                                    ],
                                    "id": 2296,
                                    "name": "MemberAccess",
                                    "src": "18180:20:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2252,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 2297,
                                    "name": "Identifier",
                                    "src": "18201:6:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_Finance_$2555",
                                              "typeString": "contract Finance"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 2298,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "18209:7:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 12719,
                                          "type": "contract Finance",
                                          "value": "this"
                                        },
                                        "id": 2299,
                                        "name": "Identifier",
                                        "src": "18217:4:5"
                                      }
                                    ],
                                    "id": 2300,
                                    "name": "FunctionCall",
                                    "src": "18209:13:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2256,
                                      "type": "uint256",
                                      "value": "_amount"
                                    },
                                    "id": 2301,
                                    "name": "Identifier",
                                    "src": "18224:7:5"
                                  }
                                ],
                                "id": 2302,
                                "name": "FunctionCall",
                                "src": "18180:52:5"
                              }
                            ],
                            "id": 2303,
                            "name": "ExpressionStatement",
                            "src": "18180:52:5"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "withdraw",
                                      "referencedDeclaration": 7139,
                                      "type": "function (address,uint256) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1069,
                                          "type": "contract EtherToken",
                                          "value": "etherToken"
                                        },
                                        "id": 2304,
                                        "name": "Identifier",
                                        "src": "18273:10:5"
                                      }
                                    ],
                                    "id": 2306,
                                    "name": "MemberAccess",
                                    "src": "18273:19:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2254,
                                      "type": "address",
                                      "value": "_receiver"
                                    },
                                    "id": 2307,
                                    "name": "Identifier",
                                    "src": "18293:9:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2256,
                                      "type": "uint256",
                                      "value": "_amount"
                                    },
                                    "id": 2308,
                                    "name": "Identifier",
                                    "src": "18304:7:5"
                                  }
                                ],
                                "id": 2309,
                                "name": "FunctionCall",
                                "src": "18273:39:5"
                              }
                            ],
                            "id": 2310,
                            "name": "ExpressionStatement",
                            "src": "18273:39:5"
                          }
                        ],
                        "id": 2311,
                        "name": "Block",
                        "src": "18166:187:5"
                      }
                    ],
                    "id": 2312,
                    "name": "IfStatement",
                    "src": "18043:310:5"
                  }
                ],
                "id": 2313,
                "name": "Block",
                "src": "17814:545:5"
              }
            ],
            "id": 2314,
            "name": "FunctionDefinition",
            "src": "17656:703:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_recordIncomingTransaction",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2337,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2315,
                        "name": "ElementaryTypeName",
                        "src": "18410:7:5"
                      }
                    ],
                    "id": 2316,
                    "name": "VariableDeclaration",
                    "src": "18410:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_sender",
                      "scope": 2337,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2317,
                        "name": "ElementaryTypeName",
                        "src": "18434:7:5"
                      }
                    ],
                    "id": 2318,
                    "name": "VariableDeclaration",
                    "src": "18434:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 2337,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2319,
                        "name": "ElementaryTypeName",
                        "src": "18459:7:5"
                      }
                    ],
                    "id": 2320,
                    "name": "VariableDeclaration",
                    "src": "18459:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reference",
                      "scope": 2337,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 2321,
                        "name": "ElementaryTypeName",
                        "src": "18484:6:5"
                      }
                    ],
                    "id": 2322,
                    "name": "VariableDeclaration",
                    "src": "18484:17:5"
                  }
                ],
                "id": 2323,
                "name": "ParameterList",
                "src": "18400:111:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2324,
                "name": "ParameterList",
                "src": "18525:0:5"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_contract$_ERC20_$12300",
                                  "typeString": "contract ERC20"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2477,
                              "type": "function (bool,contract ERC20,address,uint256,uint256,string memory)",
                              "value": "_recordTransaction"
                            },
                            "id": 2325,
                            "name": "Identifier",
                            "src": "18535:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "74727565",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "true"
                            },
                            "id": 2326,
                            "name": "Literal",
                            "src": "18567:4:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract ERC20",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12300,
                                  "type": "type(contract ERC20)",
                                  "value": "ERC20"
                                },
                                "id": 2327,
                                "name": "Identifier",
                                "src": "18609:5:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2316,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2328,
                                "name": "Identifier",
                                "src": "18615:6:5"
                              }
                            ],
                            "id": 2329,
                            "name": "FunctionCall",
                            "src": "18609:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2318,
                              "type": "address",
                              "value": "_sender"
                            },
                            "id": 2330,
                            "name": "Identifier",
                            "src": "18636:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2320,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 2331,
                            "name": "Identifier",
                            "src": "18657:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2332,
                            "name": "Literal",
                            "src": "18678:1:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2322,
                              "type": "string memory",
                              "value": "_reference"
                            },
                            "id": 2333,
                            "name": "Identifier",
                            "src": "18730:10:5"
                          }
                        ],
                        "id": 2334,
                        "name": "FunctionCall",
                        "src": "18535:215:5"
                      }
                    ],
                    "id": 2335,
                    "name": "ExpressionStatement",
                    "src": "18535:215:5"
                  }
                ],
                "id": 2336,
                "name": "Block",
                "src": "18525:232:5"
              }
            ],
            "id": 2337,
            "name": "FunctionDefinition",
            "src": "18365:392:5"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_recordTransaction",
              "payable": false,
              "scope": 2555,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_incoming",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2338,
                        "name": "ElementaryTypeName",
                        "src": "18800:4:5"
                      }
                    ],
                    "id": 2339,
                    "name": "VariableDeclaration",
                    "src": "18800:14:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 2340,
                        "name": "UserDefinedTypeName",
                        "src": "18824:5:5"
                      }
                    ],
                    "id": 2341,
                    "name": "VariableDeclaration",
                    "src": "18824:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2342,
                        "name": "ElementaryTypeName",
                        "src": "18846:7:5"
                      }
                    ],
                    "id": 2343,
                    "name": "VariableDeclaration",
                    "src": "18846:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2344,
                        "name": "ElementaryTypeName",
                        "src": "18871:7:5"
                      }
                    ],
                    "id": 2345,
                    "name": "VariableDeclaration",
                    "src": "18871:15:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paymentId",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2346,
                        "name": "ElementaryTypeName",
                        "src": "18896:7:5"
                      }
                    ],
                    "id": 2347,
                    "name": "VariableDeclaration",
                    "src": "18896:18:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_reference",
                      "scope": 2477,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "string memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string storage pointer"
                        },
                        "id": 2348,
                        "name": "ElementaryTypeName",
                        "src": "18924:6:5"
                      }
                    ],
                    "id": 2349,
                    "name": "VariableDeclaration",
                    "src": "18924:17:5"
                  }
                ],
                "id": 2350,
                "name": "ParameterList",
                "src": "18790:161:5"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2351,
                "name": "ParameterList",
                "src": "18965:0:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2353
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "periodId",
                          "scope": 2477,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2352,
                            "name": "ElementaryTypeName",
                            "src": "18975:7:5"
                          }
                        ],
                        "id": 2353,
                        "name": "VariableDeclaration",
                        "src": "18975:16:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2131,
                              "type": "function () view returns (uint256)",
                              "value": "currentPeriodId"
                            },
                            "id": 2354,
                            "name": "Identifier",
                            "src": "18994:15:5"
                          }
                        ],
                        "id": 2355,
                        "name": "FunctionCall",
                        "src": "18994:17:5"
                      }
                    ],
                    "id": 2356,
                    "name": "VariableDeclarationStatement",
                    "src": "18975:36:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2358
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "tokenStatement",
                          "scope": 2477,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.TokenStatement storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "TokenStatement",
                              "referencedDeclaration": 1041,
                              "type": "struct Finance.TokenStatement storage pointer"
                            },
                            "id": 2357,
                            "name": "UserDefinedTypeName",
                            "src": "19021:14:5"
                          }
                        ],
                        "id": 2358,
                        "name": "VariableDeclaration",
                        "src": "19021:37:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.TokenStatement storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "tokenStatement",
                              "referencedDeclaration": 1053,
                              "type": "mapping(address => struct Finance.TokenStatement storage ref)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Finance.Period storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1078,
                                      "type": "struct Finance.Period storage ref[] storage ref",
                                      "value": "periods"
                                    },
                                    "id": 2359,
                                    "name": "Identifier",
                                    "src": "19061:7:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2353,
                                      "type": "uint256",
                                      "value": "periodId"
                                    },
                                    "id": 2360,
                                    "name": "Identifier",
                                    "src": "19069:8:5"
                                  }
                                ],
                                "id": 2361,
                                "name": "IndexAccess",
                                "src": "19061:17:5"
                              }
                            ],
                            "id": 2362,
                            "name": "MemberAccess",
                            "src": "19061:32:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2341,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 2363,
                            "name": "Identifier",
                            "src": "19094:6:5"
                          }
                        ],
                        "id": 2364,
                        "name": "IndexAccess",
                        "src": "19061:40:5"
                      }
                    ],
                    "id": 2365,
                    "name": "VariableDeclarationStatement",
                    "src": "19021:80:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2339,
                          "type": "bool",
                          "value": "_incoming"
                        },
                        "id": 2366,
                        "name": "Identifier",
                        "src": "19115:9:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "income",
                                      "referencedDeclaration": 1040,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2358,
                                          "type": "struct Finance.TokenStatement storage pointer",
                                          "value": "tokenStatement"
                                        },
                                        "id": 2367,
                                        "name": "Identifier",
                                        "src": "19140:14:5"
                                      }
                                    ],
                                    "id": 2369,
                                    "name": "MemberAccess",
                                    "src": "19140:21:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "add",
                                          "referencedDeclaration": 12065,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "income",
                                              "referencedDeclaration": 1040,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2358,
                                                  "type": "struct Finance.TokenStatement storage pointer",
                                                  "value": "tokenStatement"
                                                },
                                                "id": 2370,
                                                "name": "Identifier",
                                                "src": "19164:14:5"
                                              }
                                            ],
                                            "id": 2371,
                                            "name": "MemberAccess",
                                            "src": "19164:21:5"
                                          }
                                        ],
                                        "id": 2372,
                                        "name": "MemberAccess",
                                        "src": "19164:25:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2345,
                                          "type": "uint256",
                                          "value": "_amount"
                                        },
                                        "id": 2373,
                                        "name": "Identifier",
                                        "src": "19190:7:5"
                                      }
                                    ],
                                    "id": 2374,
                                    "name": "FunctionCall",
                                    "src": "19164:34:5"
                                  }
                                ],
                                "id": 2375,
                                "name": "Assignment",
                                "src": "19140:58:5"
                              }
                            ],
                            "id": 2376,
                            "name": "ExpressionStatement",
                            "src": "19140:58:5"
                          }
                        ],
                        "id": 2377,
                        "name": "Block",
                        "src": "19126:83:5"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "expenses",
                                      "referencedDeclaration": 1038,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2358,
                                          "type": "struct Finance.TokenStatement storage pointer",
                                          "value": "tokenStatement"
                                        },
                                        "id": 2378,
                                        "name": "Identifier",
                                        "src": "19229:14:5"
                                      }
                                    ],
                                    "id": 2380,
                                    "name": "MemberAccess",
                                    "src": "19229:23:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "add",
                                          "referencedDeclaration": 12065,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "expenses",
                                              "referencedDeclaration": 1038,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 2358,
                                                  "type": "struct Finance.TokenStatement storage pointer",
                                                  "value": "tokenStatement"
                                                },
                                                "id": 2381,
                                                "name": "Identifier",
                                                "src": "19255:14:5"
                                              }
                                            ],
                                            "id": 2382,
                                            "name": "MemberAccess",
                                            "src": "19255:23:5"
                                          }
                                        ],
                                        "id": 2383,
                                        "name": "MemberAccess",
                                        "src": "19255:27:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2345,
                                          "type": "uint256",
                                          "value": "_amount"
                                        },
                                        "id": 2384,
                                        "name": "Identifier",
                                        "src": "19283:7:5"
                                      }
                                    ],
                                    "id": 2385,
                                    "name": "FunctionCall",
                                    "src": "19255:36:5"
                                  }
                                ],
                                "id": 2386,
                                "name": "Assignment",
                                "src": "19229:62:5"
                              }
                            ],
                            "id": 2387,
                            "name": "ExpressionStatement",
                            "src": "19229:62:5"
                          }
                        ],
                        "id": 2388,
                        "name": "Block",
                        "src": "19215:87:5"
                      }
                    ],
                    "id": 2389,
                    "name": "IfStatement",
                    "src": "19111:191:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2391
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "transactionId",
                          "scope": 2477,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2390,
                            "name": "ElementaryTypeName",
                            "src": "19312:7:5"
                          }
                        ],
                        "id": 2391,
                        "name": "VariableDeclaration",
                        "src": "19312:21:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "++",
                          "prefix": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1075,
                                  "type": "struct Finance.Transaction storage ref[] storage ref",
                                  "value": "transactions"
                                },
                                "id": 2392,
                                "name": "Identifier",
                                "src": "19336:12:5"
                              }
                            ],
                            "id": 2393,
                            "name": "MemberAccess",
                            "src": "19336:19:5"
                          }
                        ],
                        "id": 2394,
                        "name": "UnaryOperation",
                        "src": "19336:21:5"
                      }
                    ],
                    "id": 2395,
                    "name": "VariableDeclarationStatement",
                    "src": "19312:45:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2397
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "transaction",
                          "scope": 2477,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Transaction storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Transaction",
                              "referencedDeclaration": 1036,
                              "type": "struct Finance.Transaction storage pointer"
                            },
                            "id": 2396,
                            "name": "UserDefinedTypeName",
                            "src": "19367:11:5"
                          }
                        ],
                        "id": 2397,
                        "name": "VariableDeclaration",
                        "src": "19367:31:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Transaction storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1075,
                              "type": "struct Finance.Transaction storage ref[] storage ref",
                              "value": "transactions"
                            },
                            "id": 2398,
                            "name": "Identifier",
                            "src": "19401:12:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2391,
                              "type": "uint256",
                              "value": "transactionId"
                            },
                            "id": 2399,
                            "name": "Identifier",
                            "src": "19414:13:5"
                          }
                        ],
                        "id": 2400,
                        "name": "IndexAccess",
                        "src": "19401:27:5"
                      }
                    ],
                    "id": 2401,
                    "name": "VariableDeclarationStatement",
                    "src": "19367:61:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "periodId",
                              "referencedDeclaration": 1029,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2402,
                                "name": "Identifier",
                                "src": "19438:11:5"
                              }
                            ],
                            "id": 2404,
                            "name": "MemberAccess",
                            "src": "19438:20:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2353,
                              "type": "uint256",
                              "value": "periodId"
                            },
                            "id": 2405,
                            "name": "Identifier",
                            "src": "19461:8:5"
                          }
                        ],
                        "id": 2406,
                        "name": "Assignment",
                        "src": "19438:31:5"
                      }
                    ],
                    "id": 2407,
                    "name": "ExpressionStatement",
                    "src": "19438:31:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "amount",
                              "referencedDeclaration": 1031,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2408,
                                "name": "Identifier",
                                "src": "19479:11:5"
                              }
                            ],
                            "id": 2410,
                            "name": "MemberAccess",
                            "src": "19479:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2345,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 2411,
                            "name": "Identifier",
                            "src": "19500:7:5"
                          }
                        ],
                        "id": 2412,
                        "name": "Assignment",
                        "src": "19479:28:5"
                      }
                    ],
                    "id": 2413,
                    "name": "ExpressionStatement",
                    "src": "19479:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "paymentId",
                              "referencedDeclaration": 1033,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2414,
                                "name": "Identifier",
                                "src": "19517:11:5"
                              }
                            ],
                            "id": 2416,
                            "name": "MemberAccess",
                            "src": "19517:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2347,
                              "type": "uint256",
                              "value": "_paymentId"
                            },
                            "id": 2417,
                            "name": "Identifier",
                            "src": "19541:10:5"
                          }
                        ],
                        "id": 2418,
                        "name": "Assignment",
                        "src": "19517:34:5"
                      }
                    ],
                    "id": 2419,
                    "name": "ExpressionStatement",
                    "src": "19517:34:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "isIncoming",
                              "referencedDeclaration": 1025,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2420,
                                "name": "Identifier",
                                "src": "19561:11:5"
                              }
                            ],
                            "id": 2422,
                            "name": "MemberAccess",
                            "src": "19561:22:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2339,
                              "type": "bool",
                              "value": "_incoming"
                            },
                            "id": 2423,
                            "name": "Identifier",
                            "src": "19586:9:5"
                          }
                        ],
                        "id": 2424,
                        "name": "Assignment",
                        "src": "19561:34:5"
                      }
                    ],
                    "id": 2425,
                    "name": "ExpressionStatement",
                    "src": "19561:34:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract ERC20"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "token",
                              "referencedDeclaration": 1021,
                              "type": "contract ERC20"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2426,
                                "name": "Identifier",
                                "src": "19605:11:5"
                              }
                            ],
                            "id": 2428,
                            "name": "MemberAccess",
                            "src": "19605:17:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2341,
                              "type": "contract ERC20",
                              "value": "_token"
                            },
                            "id": 2429,
                            "name": "Identifier",
                            "src": "19625:6:5"
                          }
                        ],
                        "id": 2430,
                        "name": "Assignment",
                        "src": "19605:26:5"
                      }
                    ],
                    "id": 2431,
                    "name": "ExpressionStatement",
                    "src": "19605:26:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "entity",
                              "referencedDeclaration": 1023,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2432,
                                "name": "Identifier",
                                "src": "19641:11:5"
                              }
                            ],
                            "id": 2434,
                            "name": "MemberAccess",
                            "src": "19641:18:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2343,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 2435,
                            "name": "Identifier",
                            "src": "19662:7:5"
                          }
                        ],
                        "id": 2436,
                        "name": "Assignment",
                        "src": "19641:28:5"
                      }
                    ],
                    "id": 2437,
                    "name": "ExpressionStatement",
                    "src": "19641:28:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint64"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "date",
                              "referencedDeclaration": 1027,
                              "type": "uint64"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2438,
                                "name": "Identifier",
                                "src": "19679:11:5"
                              }
                            ],
                            "id": 2440,
                            "name": "MemberAccess",
                            "src": "19679:16:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint64",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint64)",
                                  "value": "uint64"
                                },
                                "id": 2441,
                                "name": "ElementaryTypeNameExpression",
                                "src": "19698:6:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2554,
                                      "type": "function () view returns (uint256)",
                                      "value": "getTimestamp"
                                    },
                                    "id": 2442,
                                    "name": "Identifier",
                                    "src": "19705:12:5"
                                  }
                                ],
                                "id": 2443,
                                "name": "FunctionCall",
                                "src": "19705:14:5"
                              }
                            ],
                            "id": 2444,
                            "name": "FunctionCall",
                            "src": "19698:22:5"
                          }
                        ],
                        "id": 2445,
                        "name": "Assignment",
                        "src": "19679:41:5"
                      }
                    ],
                    "id": 2446,
                    "name": "ExpressionStatement",
                    "src": "19679:41:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "reference",
                              "referencedDeclaration": 1035,
                              "type": "string storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2397,
                                  "type": "struct Finance.Transaction storage pointer",
                                  "value": "transaction"
                                },
                                "id": 2447,
                                "name": "Identifier",
                                "src": "19730:11:5"
                              }
                            ],
                            "id": 2449,
                            "name": "MemberAccess",
                            "src": "19730:21:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2349,
                              "type": "string memory",
                              "value": "_reference"
                            },
                            "id": 2450,
                            "name": "Identifier",
                            "src": "19754:10:5"
                          }
                        ],
                        "id": 2451,
                        "name": "Assignment",
                        "src": "19730:34:5"
                      }
                    ],
                    "id": 2452,
                    "name": "ExpressionStatement",
                    "src": "19730:34:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2454
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "period",
                          "scope": 2477,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct Finance.Period storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Period",
                              "referencedDeclaration": 1054,
                              "type": "struct Finance.Period storage pointer"
                            },
                            "id": 2453,
                            "name": "UserDefinedTypeName",
                            "src": "19775:6:5"
                          }
                        ],
                        "id": 2454,
                        "name": "VariableDeclaration",
                        "src": "19775:21:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Finance.Period storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1078,
                              "type": "struct Finance.Period storage ref[] storage ref",
                              "value": "periods"
                            },
                            "id": 2455,
                            "name": "Identifier",
                            "src": "19799:7:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2353,
                              "type": "uint256",
                              "value": "periodId"
                            },
                            "id": 2456,
                            "name": "Identifier",
                            "src": "19807:8:5"
                          }
                        ],
                        "id": 2457,
                        "name": "IndexAccess",
                        "src": "19799:17:5"
                      }
                    ],
                    "id": 2458,
                    "name": "VariableDeclarationStatement",
                    "src": "19775:41:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "firstTransactionId",
                              "referencedDeclaration": 1047,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2454,
                                  "type": "struct Finance.Period storage pointer",
                                  "value": "period"
                                },
                                "id": 2459,
                                "name": "Identifier",
                                "src": "19830:6:5"
                              }
                            ],
                            "id": 2460,
                            "name": "MemberAccess",
                            "src": "19830:25:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2461,
                            "name": "Literal",
                            "src": "19859:1:5"
                          }
                        ],
                        "id": 2462,
                        "name": "BinaryOperation",
                        "src": "19830:30:5"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "member_name": "firstTransactionId",
                                  "referencedDeclaration": 1047,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2454,
                                      "type": "struct Finance.Period storage pointer",
                                      "value": "period"
                                    },
                                    "id": 2463,
                                    "name": "Identifier",
                                    "src": "19874:6:5"
                                  }
                                ],
                                "id": 2465,
                                "name": "MemberAccess",
                                "src": "19874:25:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2391,
                                  "type": "uint256",
                                  "value": "transactionId"
                                },
                                "id": 2466,
                                "name": "Identifier",
                                "src": "19902:13:5"
                              }
                            ],
                            "id": 2467,
                            "name": "Assignment",
                            "src": "19874:41:5"
                          }
                        ],
                        "id": 2468,
                        "name": "ExpressionStatement",
                        "src": "19874:41:5"
                      }
                    ],
                    "id": 2469,
                    "name": "IfStatement",
                    "src": "19826:89:5"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1112,
                              "type": "function (uint256,bool,address)",
                              "value": "NewTransaction"
                            },
                            "id": 2470,
                            "name": "Identifier",
                            "src": "19926:14:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2391,
                              "type": "uint256",
                              "value": "transactionId"
                            },
                            "id": 2471,
                            "name": "Identifier",
                            "src": "19941:13:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2339,
                              "type": "bool",
                              "value": "_incoming"
                            },
                            "id": 2472,
                            "name": "Identifier",
                            "src": "19956:9:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2343,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 2473,
                            "name": "Identifier",
                            "src": "19967:7:5"
                          }
                        ],
                        "id": 2474,
                        "name": "FunctionCall",
                        "src": "19926:49:5"
                      }
                    ],
                    "id": 2475,
                    "name": "ExpressionStatement",
                    "src": "19926:49:5"
                  }
                ],
                "id": 2476,
                "name": "Block",
                "src": "18965:1017:5"
              }
            ],
            "id": 2477,
            "name": "FunctionDefinition",
            "src": "18763:1219:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_canMakePayment",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2502,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract ERC20",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "ERC20",
                          "referencedDeclaration": 12300,
                          "type": "contract ERC20"
                        },
                        "id": 2478,
                        "name": "UserDefinedTypeName",
                        "src": "20013:5:5"
                      }
                    ],
                    "id": 2479,
                    "name": "VariableDeclaration",
                    "src": "20013:12:5"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 2502,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2480,
                        "name": "ElementaryTypeName",
                        "src": "20027:7:5"
                      }
                    ],
                    "id": 2481,
                    "name": "VariableDeclaration",
                    "src": "20027:15:5"
                  }
                ],
                "id": 2482,
                "name": "ParameterList",
                "src": "20012:31:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2502,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2483,
                        "name": "ElementaryTypeName",
                        "src": "20067:4:5"
                      }
                    ],
                    "id": 2484,
                    "name": "VariableDeclaration",
                    "src": "20067:4:5"
                  }
                ],
                "id": 2485,
                "name": "ParameterList",
                "src": "20066:6:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2485
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ERC20_$12300",
                                          "typeString": "contract ERC20"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2546,
                                      "type": "function (address) view returns (uint256)",
                                      "value": "_getRemainingBudget"
                                    },
                                    "id": 2486,
                                    "name": "Identifier",
                                    "src": "20090:19:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2479,
                                      "type": "contract ERC20",
                                      "value": "_token"
                                    },
                                    "id": 2487,
                                    "name": "Identifier",
                                    "src": "20110:6:5"
                                  }
                                ],
                                "id": 2488,
                                "name": "FunctionCall",
                                "src": "20090:27:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2481,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 2489,
                                "name": "Identifier",
                                "src": "20121:7:5"
                              }
                            ],
                            "id": 2490,
                            "name": "BinaryOperation",
                            "src": "20090:38:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "balanceOf",
                                      "referencedDeclaration": 12314,
                                      "type": "function (address) view external returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2479,
                                          "type": "contract ERC20",
                                          "value": "_token"
                                        },
                                        "id": 2491,
                                        "name": "Identifier",
                                        "src": "20132:6:5"
                                      }
                                    ],
                                    "id": 2492,
                                    "name": "MemberAccess",
                                    "src": "20132:16:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "address",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_Vault_$3519",
                                              "typeString": "contract Vault"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(address)",
                                          "value": "address"
                                        },
                                        "id": 2493,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "20149:7:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1067,
                                          "type": "contract Vault",
                                          "value": "vault"
                                        },
                                        "id": 2494,
                                        "name": "Identifier",
                                        "src": "20157:5:5"
                                      }
                                    ],
                                    "id": 2495,
                                    "name": "FunctionCall",
                                    "src": "20149:14:5"
                                  }
                                ],
                                "id": 2496,
                                "name": "FunctionCall",
                                "src": "20132:32:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2481,
                                  "type": "uint256",
                                  "value": "_amount"
                                },
                                "id": 2497,
                                "name": "Identifier",
                                "src": "20168:7:5"
                              }
                            ],
                            "id": 2498,
                            "name": "BinaryOperation",
                            "src": "20132:43:5"
                          }
                        ],
                        "id": 2499,
                        "name": "BinaryOperation",
                        "src": "20090:85:5"
                      }
                    ],
                    "id": 2500,
                    "name": "Return",
                    "src": "20083:92:5"
                  }
                ],
                "id": 2501,
                "name": "Block",
                "src": "20073:109:5"
              }
            ],
            "id": 2502,
            "name": "FunctionDefinition",
            "src": "19988:194:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_getRemainingBudget",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_token",
                      "scope": 2546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 2503,
                        "name": "ElementaryTypeName",
                        "src": "20217:7:5"
                      }
                    ],
                    "id": 2504,
                    "name": "VariableDeclaration",
                    "src": "20217:14:5"
                  }
                ],
                "id": 2505,
                "name": "ParameterList",
                "src": "20216:16:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2546,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2506,
                        "name": "ElementaryTypeName",
                        "src": "20256:7:5"
                      }
                    ],
                    "id": 2507,
                    "name": "VariableDeclaration",
                    "src": "20256:7:5"
                  }
                ],
                "id": 2508,
                "name": "ParameterList",
                "src": "20255:9:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "hasBudget",
                                  "referencedDeclaration": 1064,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 2509,
                                    "name": "Identifier",
                                    "src": "20280:8:5"
                                  }
                                ],
                                "id": 2510,
                                "name": "MemberAccess",
                                "src": "20280:18:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2504,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2511,
                                "name": "Identifier",
                                "src": "20299:6:5"
                              }
                            ],
                            "id": 2512,
                            "name": "IndexAccess",
                            "src": "20280:26:5"
                          }
                        ],
                        "id": 2513,
                        "name": "UnaryOperation",
                        "src": "20279:27:5"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 2508
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 973,
                              "type": "uint256",
                              "value": "MAX_UINT"
                            },
                            "id": 2514,
                            "name": "Identifier",
                            "src": "20327:8:5"
                          }
                        ],
                        "id": 2515,
                        "name": "Return",
                        "src": "20320:15:5"
                      }
                    ],
                    "id": 2516,
                    "name": "IfStatement",
                    "src": "20275:60:5"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        2518
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "spent",
                          "scope": 2546,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2517,
                            "name": "ElementaryTypeName",
                            "src": "20346:7:5"
                          }
                        ],
                        "id": 2518,
                        "name": "VariableDeclaration",
                        "src": "20346:13:5"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "expenses",
                          "referencedDeclaration": 1038,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Finance.TokenStatement storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "tokenStatement",
                                  "referencedDeclaration": 1053,
                                  "type": "mapping(address => struct Finance.TokenStatement storage ref)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Finance.Period storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1078,
                                          "type": "struct Finance.Period storage ref[] storage ref",
                                          "value": "periods"
                                        },
                                        "id": 2519,
                                        "name": "Identifier",
                                        "src": "20362:7:5"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2131,
                                              "type": "function () view returns (uint256)",
                                              "value": "currentPeriodId"
                                            },
                                            "id": 2520,
                                            "name": "Identifier",
                                            "src": "20370:15:5"
                                          }
                                        ],
                                        "id": 2521,
                                        "name": "FunctionCall",
                                        "src": "20370:17:5"
                                      }
                                    ],
                                    "id": 2522,
                                    "name": "IndexAccess",
                                    "src": "20362:26:5"
                                  }
                                ],
                                "id": 2523,
                                "name": "MemberAccess",
                                "src": "20362:41:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2504,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2524,
                                "name": "Identifier",
                                "src": "20404:6:5"
                              }
                            ],
                            "id": 2525,
                            "name": "IndexAccess",
                            "src": "20362:49:5"
                          }
                        ],
                        "id": 2526,
                        "name": "MemberAccess",
                        "src": "20362:58:5"
                      }
                    ],
                    "id": 2527,
                    "name": "VariableDeclarationStatement",
                    "src": "20346:74:5"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2518,
                              "type": "uint256",
                              "value": "spent"
                            },
                            "id": 2528,
                            "name": "Identifier",
                            "src": "20592:5:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "budgets",
                                  "referencedDeclaration": 1060,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1080,
                                      "type": "struct Finance.Settings storage ref",
                                      "value": "settings"
                                    },
                                    "id": 2529,
                                    "name": "Identifier",
                                    "src": "20601:8:5"
                                  }
                                ],
                                "id": 2530,
                                "name": "MemberAccess",
                                "src": "20601:16:5"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2504,
                                  "type": "address",
                                  "value": "_token"
                                },
                                "id": 2531,
                                "name": "Identifier",
                                "src": "20618:6:5"
                              }
                            ],
                            "id": 2532,
                            "name": "IndexAccess",
                            "src": "20601:24:5"
                          }
                        ],
                        "id": 2533,
                        "name": "BinaryOperation",
                        "src": "20592:33:5"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 2508
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 2534,
                            "name": "Literal",
                            "src": "20646:1:5"
                          }
                        ],
                        "id": 2535,
                        "name": "Return",
                        "src": "20639:8:5"
                      }
                    ],
                    "id": 2536,
                    "name": "IfStatement",
                    "src": "20588:59:5"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2508
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sub",
                              "referencedDeclaration": 12041,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "budgets",
                                      "referencedDeclaration": 1060,
                                      "type": "mapping(address => uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1080,
                                          "type": "struct Finance.Settings storage ref",
                                          "value": "settings"
                                        },
                                        "id": 2537,
                                        "name": "Identifier",
                                        "src": "20665:8:5"
                                      }
                                    ],
                                    "id": 2538,
                                    "name": "MemberAccess",
                                    "src": "20665:16:5"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2504,
                                      "type": "address",
                                      "value": "_token"
                                    },
                                    "id": 2539,
                                    "name": "Identifier",
                                    "src": "20682:6:5"
                                  }
                                ],
                                "id": 2540,
                                "name": "IndexAccess",
                                "src": "20665:24:5"
                              }
                            ],
                            "id": 2541,
                            "name": "MemberAccess",
                            "src": "20665:28:5"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2518,
                              "type": "uint256",
                              "value": "spent"
                            },
                            "id": 2542,
                            "name": "Identifier",
                            "src": "20694:5:5"
                          }
                        ],
                        "id": 2543,
                        "name": "FunctionCall",
                        "src": "20665:35:5"
                      }
                    ],
                    "id": 2544,
                    "name": "Return",
                    "src": "20658:42:5"
                  }
                ],
                "id": 2545,
                "name": "Block",
                "src": "20265:442:5"
              }
            ],
            "id": 2546,
            "name": "FunctionDefinition",
            "src": "20188:519:5"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getTimestamp",
              "payable": false,
              "scope": 2555,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2547,
                "name": "ParameterList",
                "src": "20734:2:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 2554,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2548,
                        "name": "ElementaryTypeName",
                        "src": "20760:7:5"
                      }
                    ],
                    "id": 2549,
                    "name": "VariableDeclaration",
                    "src": "20760:7:5"
                  }
                ],
                "id": 2550,
                "name": "ParameterList",
                "src": "20759:9:5"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2550
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 12592,
                          "type": "uint256",
                          "value": "now"
                        },
                        "id": 2551,
                        "name": "Identifier",
                        "src": "20778:3:5"
                      }
                    ],
                    "id": 2552,
                    "name": "Return",
                    "src": "20771:10:5"
                  }
                ],
                "id": 2553,
                "name": "Block",
                "src": "20769:15:5"
              }
            ],
            "id": 2554,
            "name": "FunctionDefinition",
            "src": "20713:71:5"
          }
        ],
        "id": 2555,
        "name": "ContractDefinition",
        "src": "484:20302:5"
      }
    ],
    "id": 2556,
    "name": "SourceUnit",
    "src": "0:20787:5"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-03-14T08:41:25.066Z"
}