{
  "contractName": "CycleUtils",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_CYCLE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EVENT_SCHEDULE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_POINT_ZERO\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"eomc\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycle\",\"type\":\"tuple\"}],\"name\":\"adjustEndOfMonthConvention\",\"outputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"details\":\"The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \\\"M\\\" period unit or multiple thereof\",\"params\":{\"cycle\":\"the cycle struct\",\"eomc\":\"the end of month convention to adjust\",\"startTime\":\"timestamp of the cycle start\"},\"returns\":{\"_0\":\"the adjusted end of month convention\"}}},\"title\":\"Schedule\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"notice\":\"This function makes an adjustment on the end of month convention.\"}},\"notice\":\"Methods related to generating event schedules.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol\":\"CycleUtils\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol\":{\"keccak256\":\"0xd7588866afdab6298dd5b64c5fe0ca63230236538d711932e7a5a17928d1226b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2a0678d5f895239119f463a3ae8a58c5c27b872c91db1cd4253ce5866481c6cd\",\"dweb:/ipfs/QmPXsMXFf1Qar8JCnKTL6Nizf63sZEQQt7XosrdeEnG2CE\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol\":{\"keccak256\":\"0xe004912bd32ef22ac6ee91f35a3855b06492d8a89f585f1a508c1c26349fd880\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e70d558bee746b797cdcadf84d5c9cd1b77fc6e99a089524ecaeb91201c71dcd\",\"dweb:/ipfs/QmcxpSKn5ZG4DPrSkm1Pxd21So6NKcHdiX5zfpExD5eLpv\"]},\"@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol\":{\"keccak256\":\"0x230700c45141dbc7973f813d1eae8ea2fe3a804489b7f29f46d44ac5d5f12048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a2bebe3ddd62e9c2ede6a298ef956b8315198da601223a3900d07490dab3b7f1\",\"dweb:/ipfs/QmWyQxUsCjGMRKmxseE61qaipeqHVcZ6tLhVXvLfKnFkxo\"]},\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":{\"keccak256\":\"0xb549e34dc631989f8aae1b8a397bf77598b8c018860645a627d2929229543a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8a0ef5e2ad69ef87b9fc2beeed66336b3857c576efb9833b40a1be2ee35786fc\",\"dweb:/ipfs/QmT33MWqdjecGoPj8Js6a5fgESTcGW5vbQqYamKRDJZnhS\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061049e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063179331f31461005c5780636f37e55b14610085578063aaf5eb681461009a578063c40c5a98146100a2578063edc0465f146100a2575b600080fd5b61006f61006a36600461030c565b6100aa565b60405161007c91906103b5565b60405180910390f35b61008d61017a565b60405161007c91906103c9565b61008d610186565b61008d61018b565b600060018460018111156100ba57fe5b1415610136576100c983610190565b6100d2846101ba565b14801561012157506002826020015160058111156100ec57fe5b1480610107575060038260200151600581111561010557fe5b145b80610121575060048260200151600581111561011f57fe5b145b1561012e57506001610173565b506000610173565b600084600181111561014457fe5b141561015257506000610173565b60405162461bcd60e51b815260040161016a906103d2565b60405180910390fd5b9392505050565b670de0b6b3a764000081565b601281565b607881565b600080806101a362015180855b046101c9565b50915091506101b2828261025f565b949350505050565b60006101b2620151808361019d565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161022057fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806102705750816003145b8061027b5750816005145b806102865750816007145b806102915750816008145b8061029c575081600a145b806102a7575081600c145b156102b45750601f6102e1565b816002146102c45750601e6102e1565b6102cd836102e7565b6102d857601c6102db565b601d5b60ff1690505b92915050565b6000600482061580156102fc57506064820615155b806102e157505061019090061590565b600080600083850360c0811215610321578384fd5b843561032c8161044e565b9350602085013592506080603f1982011215610346578182fd5b506040516080810181811067ffffffffffffffff82111715610366578283fd5b60409081528501358152606085013561037e8161045b565b602082015260808501356103918161044e565b604082015260a08501356103a48161043d565b606082015292959194509192509050565b60208101600283106103c357fe5b91905290565b90815260200190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b801515811461044b57600080fd5b50565b6002811061044b57600080fd5b6006811061044b57600080fdfea26469706673582212201dff6380eba8426bc2c247e432c0f2b441e7d607bfaf3fbdf0ef5cfb1da4755464736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063179331f31461005c5780636f37e55b14610085578063aaf5eb681461009a578063c40c5a98146100a2578063edc0465f146100a2575b600080fd5b61006f61006a36600461030c565b6100aa565b60405161007c91906103b5565b60405180910390f35b61008d61017a565b60405161007c91906103c9565b61008d610186565b61008d61018b565b600060018460018111156100ba57fe5b1415610136576100c983610190565b6100d2846101ba565b14801561012157506002826020015160058111156100ec57fe5b1480610107575060038260200151600581111561010557fe5b145b80610121575060048260200151600581111561011f57fe5b145b1561012e57506001610173565b506000610173565b600084600181111561014457fe5b141561015257506000610173565b60405162461bcd60e51b815260040161016a906103d2565b60405180910390fd5b9392505050565b670de0b6b3a764000081565b601281565b607881565b600080806101a362015180855b046101c9565b50915091506101b2828261025f565b949350505050565b60006101b2620151808361019d565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161022057fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806102705750816003145b8061027b5750816005145b806102865750816007145b806102915750816008145b8061029c575081600a145b806102a7575081600c145b156102b45750601f6102e1565b816002146102c45750601e6102e1565b6102cd836102e7565b6102d857601c6102db565b601d5b60ff1690505b92915050565b6000600482061580156102fc57506064820615155b806102e157505061019090061590565b600080600083850360c0811215610321578384fd5b843561032c8161044e565b9350602085013592506080603f1982011215610346578182fd5b506040516080810181811067ffffffffffffffff82111715610366578283fd5b60409081528501358152606085013561037e8161045b565b602082015260808501356103918161044e565b604082015260a08501356103a48161043d565b606082015292959194509192509050565b60208101600283106103c357fe5b91905290565b90815260200190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b801515811461044b57600080fd5b50565b6002811061044b57600080fd5b6006811061044b57600080fdfea26469706673582212201dff6380eba8426bc2c247e432c0f2b441e7d607bfaf3fbdf0ef5cfb1da4755464736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "397:5661:81:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "397:5661:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1010:924:78;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;298:52:73;;;:::i;:::-;;;;;;;:::i;254:38::-;;;:::i;356:44::-;;;:::i;1010:924:78:-;1185:20;1233:24;1225:4;:32;;;;;;;;;1221:618;;;1483:53;1526:9;1483:42;:53::i;:::-;1434:45;1469:9;1434:34;:45::i;:::-;:102;:174;;;;-1:-1:-1;1568:3:78;1557:5;:7;;;:14;;;;;;;;;:32;;;-1:-1:-1;1586:3:78;1575:5;:7;;;:14;;;;;;;;;1557:32;:50;;;-1:-1:-1;1604:3:78;1593:5;:7;;;:14;;;;;;;;;1557:50;1413:274;;;-1:-1:-1;1648:24:78;1641:31;;1413:274;-1:-1:-1;1707:23:78;1700:30;;1221:618;1759:23;1751:4;:31;;;;;;;;;1747:92;;;-1:-1:-1;1805:23:78;1798:30;;1747:92;1848:79;;-1:-1:-1;;;1848:79:78;;;;;;;:::i;:::-;;;;;;;;1010:924;;;;;;:::o;298:52:73:-;338:12;298:52;:::o;254:38::-;290:2;254:38;:::o;356:44::-;397:3;356:44;:::o;6258:217:106:-;6321:16;;;6376:40;1020:12;6388:9;:27;;6376:11;:40::i;:::-;6349:67;;;;;6440:28;6456:4;6462:5;6440:15;:28::i;:::-;6426:42;6258:217;-1:-1:-1;;;;6258:217:106:o;7362:132::-;7417:8;7447:40;1020:12;7459:9;:27;;3309:605;3365:9;;;3425:5;3450:31;;;3365:9;3507:6;3499:1;:5;;:14;;-1:-1:-1;3550:1:106;3545;3532:6;:10;;:14;3531:20;3527:24;;;;3561:9;3590:7;3573:4;3585:1;3581:5;;3573:14;:24;;-1:-1:-1;3630:1:106;3615:4;:12;;:16;3611:1;:20;3634:2;3611:25;3607:29;;3646:10;3668:4;3664:1;3659:2;:6;:13;;;;;;;-1:-1:-1;3682:8:106;3713:2;3697:4;:13;;:18;3693:22;;;-1:-1:-1;3738:2:106;3729:6;:11;-1:-1:-1;;3803:6:106;;;;3796:3;:14;:22;;;;:26;;;3768:1;3772:2;:6;;;3759:19;;;;;;;;-1:-1:-1;3729:11:106;-1:-1:-1;3796:26:106;-1:-1:-1;;;;3309:605:106:o;6480:383::-;6551:16;6583:5;6592:1;6583:10;:24;;;;6597:5;6606:1;6597:10;6583:24;:38;;;;6611:5;6620:1;6611:10;6583:38;:52;;;;6625:5;6634:1;6625:10;6583:52;:66;;;;6639:5;6648:1;6639:10;6583:66;:81;;;;6653:5;6662:2;6653:11;6583:81;:96;;;;6668:5;6677:2;6668:11;6583:96;6579:278;;;-1:-1:-1;6709:2:106;6579:278;;;6732:5;6741:1;6732:10;6728:129;;-1:-1:-1;6772:2:106;6728:129;;;6819:17;6831:4;6819:11;:17::i;:::-;:27;;6844:2;6819:27;;;6839:2;6819:27;6805:41;;;;6728:129;6480:383;;;;:::o;5820:157::-;5875:13;5920:1;5913:4;:8;:13;5912:36;;;;-1:-1:-1;5939:3:106;5932:4;:10;:15;;5912:36;5911:59;;;-1:-1:-1;;5961:3:106;5954:10;;:15;;5820:157::o;1543:588:-1:-;;;;1717:9;1708:7;1704:23;1729:3;1704:23;1700:33;1697:2;;;-1:-1;;1736:12;1697:2;242:6;229:20;254:59;307:5;254:59;:::i;:::-;1788:89;-1:-1;1914:2;1953:22;;1473:20;;-1:-1;755:4;-1:-1;;734:19;;730:30;727:2;;;-1:-1;;763:12;727:2;;2022;4218:9;755:4;4254:6;4250:17;4361:6;4349:10;4346:22;4325:18;4313:10;4310:34;4307:62;4304:2;;;-1:-1;;4372:12;4304:2;2022;4391:22;;;2083;;1473:20;865:75;;1059:22;;;399:20;424:40;399:20;424:40;:::i;:::-;1914:2;1013:16;;1006:82;755:4;1207:22;;229:20;254:59;229:20;254:59;:::i;:::-;2022:2;1161:16;;1154:82;1349:22;;;69:20;94:30;69:20;94:30;:::i;:::-;1059:22;1313:16;;1306:72;1691:440;;;;-1:-1;1317:5;;-1:-1;1691:440;-1:-1;1691:440::o;3008:270::-;3159:2;3144:18;;5271:1;5261:12;;5251:2;;5277:9;5251:2;2233:74;;;3130:148;:::o;3285:218::-;2388:36;;;3410:2;3395:18;;3381:122::o;3510:416::-;3710:2;3724:47;;;2661:2;3695:18;;;4529:19;2697:34;4569:14;;;2677:55;2766:34;2752:12;;;2745:56;-1:-1;;;2821:12;;;2814:29;2862:12;;;3681:245::o;5300:111::-;5381:5;4663:13;4656:21;5359:5;5356:32;5346:2;;5402:1;;5392:12;5346:2;5340:71;:::o;5418:120::-;5513:1;5506:5;5503:12;5493:2;;5529:1;;5519:12;5545:101;5621:1;5614:5;5611:12;5601:2;;5637:1;;5627:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\";\n\nimport \"../ACTUSTypes.sol\";\nimport \"../ACTUSConstants.sol\";\nimport \"../Conventions/EndOfMonthConventions.sol\";\nimport \"./PeriodUtils.sol\";\n\n\n/**\n * @title Schedule\n * @notice Methods related to generating event schedules.\n */\ncontract CycleUtils is ACTUSConstants, EndOfMonthConventions, PeriodUtils {\n\n    using BokkyPooBahsDateTimeLibrary for uint;\n\n    /**\n     * @notice Applies the cycle n - times (n := cycleIndex) to a given date\n     */\n    function getNextCycleDate(IPS memory cycle, uint256 cycleStart, uint256 cycleIndex)\n        internal\n        pure\n        returns (uint256)\n    {\n        uint256 newTimestamp;\n\n        if (cycle.p == P.D) {\n            newTimestamp = cycleStart.addDays(cycle.i * cycleIndex);\n        } else if (cycle.p == P.W) {\n            newTimestamp = cycleStart.addDays(cycle.i * 7 * cycleIndex);\n        } else if (cycle.p == P.M) {\n            newTimestamp = cycleStart.addMonths(cycle.i * cycleIndex);\n        } else if (cycle.p == P.Q) {\n            newTimestamp = cycleStart.addMonths(cycle.i * 3 * cycleIndex);\n        } else if (cycle.p == P.H) {\n            newTimestamp = cycleStart.addMonths(cycle.i * 6 * cycleIndex);\n        } else if (cycle.p == P.Y) {\n            newTimestamp = cycleStart.addYears(cycle.i * cycleIndex);\n        } else {\n            revert(\"Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND\");\n        }\n\n        return newTimestamp;\n    }\n\n    /**\n     * Computes an array of timestamps that represent dates in a cycle falling within a given segment.\n     * @dev There are some notable edge cases: If the cycle is \"not set\" we return the start end end dates\n     * of the cycle if they lie within the segment. Otherwise and empty array is returned.\n     * @param cycleStart start time of the cycle\n     * @param cycleEnd end time of the cycle\n     * @param cycle IPS cycle\n     * @param eomc end of month convention\n     * @param addEndTime timestamp of the end of the cycle should be added to the result if it falls in the segment\n     * @param segmentStart start time of the segment\n     * @param segmentEnd end time of the segment\n     * @return an array of timestamps from the given cycle that fall within the specified segement\n     */\n    function computeDatesFromCycleSegment(\n        uint256 cycleStart,\n        uint256 cycleEnd,\n        IPS memory cycle,\n        EndOfMonthConvention eomc,\n        bool addEndTime,\n        uint256 segmentStart,\n        uint256 segmentEnd\n    )\n        internal\n        pure\n        returns (uint256[MAX_CYCLE_SIZE] memory)\n    {\n        uint256[MAX_CYCLE_SIZE] memory dates;\n        uint256 index;\n\n        // if the cycle is not set we return only the cycle start end end dates under these conditions:\n        // we return the cycle start, if it's in the segment\n        // in case of addEntTime = true, the cycle end is also returned if in the segment\n        if (cycle.isSet == false) {\n            if (isInSegment(cycleStart, segmentStart, segmentEnd)) {\n                dates[index] = cycleStart;\n                index++;\n            }\n            if (isInSegment(cycleEnd, segmentStart, segmentEnd)) {\n                if (addEndTime == true) dates[index] = cycleEnd;\n            }\n            return dates;\n        }\n\n        uint256 date = cycleStart;\n        uint256 cycleIndex;\n\n        EndOfMonthConvention actualEOMC = adjustEndOfMonthConvention(eomc, cycleStart, cycle);\n\n        // walk through the cycle and create the cycle dates to be returned\n        while (date < cycleEnd) {\n            // if date is in segment and MAX_CYCLE_SIZE is not reached add it to the output array\n            if (isInSegment(date, segmentStart, segmentEnd)) {\n                require(index < (MAX_CYCLE_SIZE - 2), \"Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE\");\n                dates[index] = date;\n                index++;\n            }\n\n            cycleIndex++;\n\n            date = (actualEOMC == EndOfMonthConvention.EOM)\n                ? shiftEndOfMonth(getNextCycleDate(cycle, cycleStart, cycleIndex))\n                : getNextCycleDate(cycle, cycleStart, cycleIndex);\n        }\n\n        // add additional time at the end if addEndTime\n        if (addEndTime == true) {\n            if (isInSegment(cycleEnd, segmentStart, segmentEnd)) {\n                dates[index] = cycleEnd;\n            }\n        }\n\n        // handle a special case where S is set to LONG (e.g. for trimming a cycle to the maturity date)\n        if (index > 0 && isInSegment(dates[index - 1], segmentStart, segmentEnd)) {\n            if (cycle.s == S.LONG && index > 1 && cycleEnd != date) {\n                dates[index - 1] = dates[index];\n                delete dates[index];\n            }\n        }\n\n        return dates;\n    }\n\n    /**\n     * Computes the next date for a given an IPS cycle.\n     * @param cycle IPS cycle\n     * @param precedingDate the previous date of the cycle\n     * @return next date of the cycle\n     */\n    function computeNextCycleDateFromPrecedingDate(\n        IPS memory cycle,\n        EndOfMonthConvention eomc,\n        uint256 anchorDate,\n        uint256 precedingDate\n    )\n        internal\n        pure\n        returns (uint256)\n    {\n        if (cycle.isSet == false || precedingDate == 0) return anchorDate;\n\n        return (adjustEndOfMonthConvention(eomc, anchorDate, cycle) == EndOfMonthConvention.EOM)\n            ? shiftEndOfMonth(getNextCycleDate(cycle, precedingDate, 1))\n            : getNextCycleDate(cycle, precedingDate, 1);\n    }\n\n    /*\n     * @notice Checks if a timestamp is in a given range.\n     */\n    function isInSegment(\n        uint256 timestamp,\n        uint256 startTimestamp,\n        uint256 endTimestamp\n    )\n        internal\n        pure\n        returns (bool)\n    {\n        if (startTimestamp > endTimestamp) return false;\n        if (startTimestamp <= timestamp && timestamp <= endTimestamp) return true;\n        return false;\n    }\n}\n",
  "sourcePath": "@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol",
    "exportedSymbols": {
      "CycleUtils": [
        24668
      ]
    },
    "id": 24669,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24232,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:81"
      },
      {
        "id": 24233,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:81"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 24234,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 37178,
        "src": "101:68:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 24235,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 23007,
        "src": "171:27:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol",
        "file": "../ACTUSConstants.sol",
        "id": 24236,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 22466,
        "src": "199:31:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol",
        "file": "../Conventions/EndOfMonthConventions.sol",
        "id": 24237,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 24014,
        "src": "231:50:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol",
        "file": "./PeriodUtils.sol",
        "id": 24238,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 24886,
        "src": "282:27:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24240,
              "name": "ACTUSConstants",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22465,
              "src": "420:14:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACTUSConstants_$22465",
                "typeString": "contract ACTUSConstants"
              }
            },
            "id": 24241,
            "nodeType": "InheritanceSpecifier",
            "src": "420:14:81"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24242,
              "name": "EndOfMonthConventions",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24013,
              "src": "436:21:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EndOfMonthConventions_$24013",
                "typeString": "contract EndOfMonthConventions"
              }
            },
            "id": 24243,
            "nodeType": "InheritanceSpecifier",
            "src": "436:21:81"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24244,
              "name": "PeriodUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24885,
              "src": "459:11:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PeriodUtils_$24885",
                "typeString": "contract PeriodUtils"
              }
            },
            "id": 24245,
            "nodeType": "InheritanceSpecifier",
            "src": "459:11:81"
          }
        ],
        "contractDependencies": [
          22465,
          24013,
          24885
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 24239,
          "nodeType": "StructuredDocumentation",
          "src": "312:84:81",
          "text": " @title Schedule\n @notice Methods related to generating event schedules."
        },
        "fullyImplemented": true,
        "id": 24668,
        "linearizedBaseContracts": [
          24668,
          24885,
          24013,
          22465
        ],
        "name": "CycleUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24248,
            "libraryName": {
              "contractScope": null,
              "id": 24246,
              "name": "BokkyPooBahsDateTimeLibrary",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37177,
              "src": "484:27:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BokkyPooBahsDateTimeLibrary_$37177",
                "typeString": "library BokkyPooBahsDateTimeLibrary"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "478:43:81",
            "typeName": {
              "id": 24247,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "516:4:81",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 24378,
              "nodeType": "Block",
              "src": "764:813:81",
              "statements": [
                {
                  "assignments": [
                    24261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24261,
                      "mutability": "mutable",
                      "name": "newTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24378,
                      "src": "774:20:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "774:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24262,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "774:20:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_P_$22474",
                      "typeString": "enum P"
                    },
                    "id": 24267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24263,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24251,
                        "src": "809:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      },
                      "id": 24264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "p",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22481,
                      "src": "809:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24265,
                        "name": "P",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22474,
                        "src": "820:1:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                          "typeString": "type(enum P)"
                        }
                      },
                      "id": 24266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "D",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "820:3:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "src": "809:14:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      },
                      "id": 24283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24279,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24251,
                          "src": "915:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        "id": 24280,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "p",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22481,
                        "src": "915:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24281,
                          "name": "P",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22474,
                          "src": "926:1:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                            "typeString": "type(enum P)"
                          }
                        },
                        "id": 24282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "W",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "926:3:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "src": "915:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        },
                        "id": 24301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24297,
                            "name": "cycle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24251,
                            "src": "1025:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                              "typeString": "struct IPS memory"
                            }
                          },
                          "id": 24298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "p",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22481,
                          "src": "1025:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24299,
                            "name": "P",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22474,
                            "src": "1036:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                              "typeString": "type(enum P)"
                            }
                          },
                          "id": 24300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "M",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1036:3:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "src": "1025:14:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          },
                          "id": 24317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24313,
                              "name": "cycle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24251,
                              "src": "1133:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              }
                            },
                            "id": 24314,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "p",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22481,
                            "src": "1133:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24315,
                              "name": "P",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22474,
                              "src": "1144:1:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                "typeString": "type(enum P)"
                              }
                            },
                            "id": 24316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Q",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1144:3:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "src": "1133:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            },
                            "id": 24335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24331,
                                "name": "cycle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24251,
                                "src": "1245:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              },
                              "id": 24332,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "p",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22481,
                              "src": "1245:7:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24333,
                                "name": "P",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22474,
                                "src": "1256:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                  "typeString": "type(enum P)"
                                }
                              },
                              "id": 24334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "H",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1256:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "src": "1245:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              },
                              "id": 24353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24349,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24251,
                                  "src": "1357:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                "id": 24350,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "p",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22481,
                                "src": "1357:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24351,
                                  "name": "P",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22474,
                                  "src": "1368:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                    "typeString": "type(enum P)"
                                  }
                                },
                                "id": 24352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Y",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1368:3:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "src": "1357:14:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 24369,
                              "nodeType": "Block",
                              "src": "1460:81:81",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "5363686564756c652e6765744e6578744379636c65446174653a204154545249425554455f4e4f545f464f554e44",
                                        "id": 24366,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1481:48:81",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_053fe059272c007eabb5b289a27c337d183359dd93ab091e047b32ff8a9e02e8",
                                          "typeString": "literal_string \"Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND\""
                                        },
                                        "value": "Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_053fe059272c007eabb5b289a27c337d183359dd93ab091e047b32ff8a9e02e8",
                                          "typeString": "literal_string \"Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND\""
                                        }
                                      ],
                                      "id": 24365,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "1474:6:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 24367,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1474:56:81",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 24368,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1474:56:81"
                                }
                              ]
                            },
                            "id": 24370,
                            "nodeType": "IfStatement",
                            "src": "1353:188:81",
                            "trueBody": {
                              "id": 24364,
                              "nodeType": "Block",
                              "src": "1373:81:81",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24362,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 24354,
                                      "name": "newTimestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24261,
                                      "src": "1387:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24360,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 24357,
                                              "name": "cycle",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 24251,
                                              "src": "1422:5:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                                "typeString": "struct IPS memory"
                                              }
                                            },
                                            "id": 24358,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "i",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22479,
                                            "src": "1422:7:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 24359,
                                            "name": "cycleIndex",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24255,
                                            "src": "1432:10:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "1422:20:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24355,
                                          "name": "cycleStart",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24253,
                                          "src": "1402:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 24356,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "addYears",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36574,
                                        "src": "1402:19:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 24361,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1402:41:81",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1387:56:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24363,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1387:56:81"
                                }
                              ]
                            }
                          },
                          "id": 24371,
                          "nodeType": "IfStatement",
                          "src": "1241:300:81",
                          "trueBody": {
                            "id": 24348,
                            "nodeType": "Block",
                            "src": "1261:86:81",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 24336,
                                    "name": "newTimestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24261,
                                    "src": "1275:12:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24342,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 24339,
                                              "name": "cycle",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 24251,
                                              "src": "1311:5:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                                "typeString": "struct IPS memory"
                                              }
                                            },
                                            "id": 24340,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "i",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22479,
                                            "src": "1311:7:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "36",
                                            "id": 24341,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1321:1:81",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_6_by_1",
                                              "typeString": "int_const 6"
                                            },
                                            "value": "6"
                                          },
                                          "src": "1311:11:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 24343,
                                          "name": "cycleIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24255,
                                          "src": "1325:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "1311:24:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24337,
                                        "name": "cycleStart",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24253,
                                        "src": "1290:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 24338,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "addMonths",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 36656,
                                      "src": "1290:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 24345,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1290:46:81",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1275:61:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24347,
                                "nodeType": "ExpressionStatement",
                                "src": "1275:61:81"
                              }
                            ]
                          }
                        },
                        "id": 24372,
                        "nodeType": "IfStatement",
                        "src": "1129:412:81",
                        "trueBody": {
                          "id": 24330,
                          "nodeType": "Block",
                          "src": "1149:86:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 24318,
                                  "name": "newTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24261,
                                  "src": "1163:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 24326,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24324,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24321,
                                            "name": "cycle",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24251,
                                            "src": "1199:5:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                              "typeString": "struct IPS memory"
                                            }
                                          },
                                          "id": 24322,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22479,
                                          "src": "1199:7:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "33",
                                          "id": 24323,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1209:1:81",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_3_by_1",
                                            "typeString": "int_const 3"
                                          },
                                          "value": "3"
                                        },
                                        "src": "1199:11:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 24325,
                                        "name": "cycleIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24255,
                                        "src": "1213:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1199:24:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24319,
                                      "name": "cycleStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24253,
                                      "src": "1178:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 24320,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addMonths",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 36656,
                                    "src": "1178:20:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24327,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1178:46:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1163:61:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24329,
                              "nodeType": "ExpressionStatement",
                              "src": "1163:61:81"
                            }
                          ]
                        }
                      },
                      "id": 24373,
                      "nodeType": "IfStatement",
                      "src": "1021:520:81",
                      "trueBody": {
                        "id": 24312,
                        "nodeType": "Block",
                        "src": "1041:82:81",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 24310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 24302,
                                "name": "newTimestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24261,
                                "src": "1055:12:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24305,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24251,
                                        "src": "1091:5:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 24306,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "i",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22479,
                                      "src": "1091:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 24307,
                                      "name": "cycleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24255,
                                      "src": "1101:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1091:20:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24303,
                                    "name": "cycleStart",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24253,
                                    "src": "1070:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24304,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "addMonths",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36656,
                                  "src": "1070:20:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 24309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1070:42:81",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1055:57:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24311,
                            "nodeType": "ExpressionStatement",
                            "src": "1055:57:81"
                          }
                        ]
                      }
                    },
                    "id": 24374,
                    "nodeType": "IfStatement",
                    "src": "911:630:81",
                    "trueBody": {
                      "id": 24296,
                      "nodeType": "Block",
                      "src": "931:84:81",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 24294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 24284,
                              "name": "newTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24261,
                              "src": "945:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24292,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24290,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24287,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24251,
                                        "src": "979:5:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 24288,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "i",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22479,
                                      "src": "979:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "37",
                                      "id": 24289,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "989:1:81",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_7_by_1",
                                        "typeString": "int_const 7"
                                      },
                                      "value": "7"
                                    },
                                    "src": "979:11:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 24291,
                                    "name": "cycleIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24255,
                                    "src": "993:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "979:24:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24285,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24253,
                                  "src": "960:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addDays",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36680,
                                "src": "960:18:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "960:44:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "945:59:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 24295,
                          "nodeType": "ExpressionStatement",
                          "src": "945:59:81"
                        }
                      ]
                    }
                  },
                  "id": 24375,
                  "nodeType": "IfStatement",
                  "src": "805:736:81",
                  "trueBody": {
                    "id": 24278,
                    "nodeType": "Block",
                    "src": "825:80:81",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24268,
                            "name": "newTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24261,
                            "src": "839:12:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 24274,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24271,
                                    "name": "cycle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24251,
                                    "src": "873:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                      "typeString": "struct IPS memory"
                                    }
                                  },
                                  "id": 24272,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "i",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22479,
                                  "src": "873:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 24273,
                                  "name": "cycleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24255,
                                  "src": "883:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "873:20:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 24269,
                                "name": "cycleStart",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24253,
                                "src": "854:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addDays",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36680,
                              "src": "854:18:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 24275,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "854:40:81",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "839:55:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24277,
                        "nodeType": "ExpressionStatement",
                        "src": "839:55:81"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24376,
                    "name": "newTimestamp",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24261,
                    "src": "1558:12:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24259,
                  "id": 24377,
                  "nodeType": "Return",
                  "src": "1551:19:81"
                }
              ]
            },
            "documentation": {
              "id": 24249,
              "nodeType": "StructuredDocumentation",
              "src": "527:88:81",
              "text": " @notice Applies the cycle n - times (n := cycleIndex) to a given date"
            },
            "id": 24379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextCycleDate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24251,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "646:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24250,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "646:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24253,
                  "mutability": "mutable",
                  "name": "cycleStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "664:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "664:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24255,
                  "mutability": "mutable",
                  "name": "cycleIndex",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "684:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "684:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "645:58:81"
            },
            "returnParameters": {
              "id": 24259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24258,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "751:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24257,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "751:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "750:9:81"
            },
            "scope": 24668,
            "src": "620:957:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24587,
              "nodeType": "Block",
              "src": "2709:2178:81",
              "statements": [
                {
                  "assignments": [
                    24406
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24406,
                      "mutability": "mutable",
                      "name": "dates",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "2719:36:81",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                        "typeString": "uint256[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 24404,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2719:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24405,
                        "length": {
                          "argumentTypes": null,
                          "id": 24403,
                          "name": "MAX_CYCLE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22461,
                          "src": "2727:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "2719:23:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                          "typeString": "uint256[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24407,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2719:36:81"
                },
                {
                  "assignments": [
                    24409
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24409,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "2765:13:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24408,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2765:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24410,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2765:13:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24411,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24386,
                        "src": "3048:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      },
                      "id": 24412,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22485,
                      "src": "3048:11:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 24413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3063:5:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "3048:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24451,
                  "nodeType": "IfStatement",
                  "src": "3044:360:81",
                  "trueBody": {
                    "id": 24450,
                    "nodeType": "Block",
                    "src": "3070:334:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24416,
                              "name": "cycleStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24382,
                              "src": "3100:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24417,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3112:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24418,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3126:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24415,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3088:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:49:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24430,
                        "nodeType": "IfStatement",
                        "src": "3084:138:81",
                        "trueBody": {
                          "id": 24429,
                          "nodeType": "Block",
                          "src": "3139:83:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24420,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "3157:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24422,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24421,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "3163:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3157:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24423,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24382,
                                  "src": "3172:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3157:25:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24425,
                              "nodeType": "ExpressionStatement",
                              "src": "3157:25:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "3200:7:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 24426,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24409,
                                  "src": "3200:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24428,
                              "nodeType": "ExpressionStatement",
                              "src": "3200:7:81"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24432,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "3251:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24433,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3261:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24434,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3275:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24431,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3239:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3239:47:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24447,
                        "nodeType": "IfStatement",
                        "src": "3235:133:81",
                        "trueBody": {
                          "id": 24446,
                          "nodeType": "Block",
                          "src": "3288:80:81",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 24438,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 24436,
                                  "name": "addEndTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24390,
                                  "src": "3310:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 24437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3324:4:81",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3310:18:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 24445,
                              "nodeType": "IfStatement",
                              "src": "3306:47:81",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 24439,
                                      "name": "dates",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24406,
                                      "src": "3330:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                        "typeString": "uint256[120] memory"
                                      }
                                    },
                                    "id": 24441,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 24440,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "3336:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "3330:12:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "id": 24442,
                                    "name": "cycleEnd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24384,
                                    "src": "3345:8:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3330:23:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24444,
                                "nodeType": "ExpressionStatement",
                                "src": "3330:23:81"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24448,
                          "name": "dates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24406,
                          "src": "3388:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                            "typeString": "uint256[120] memory"
                          }
                        },
                        "functionReturnParameters": 24400,
                        "id": 24449,
                        "nodeType": "Return",
                        "src": "3381:12:81"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    24453
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24453,
                      "mutability": "mutable",
                      "name": "date",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3414:12:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24452,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3414:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24455,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 24454,
                    "name": "cycleStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24382,
                    "src": "3429:10:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3414:25:81"
                },
                {
                  "assignments": [
                    24457
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24457,
                      "mutability": "mutable",
                      "name": "cycleIndex",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3449:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24456,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3449:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24458,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3449:18:81"
                },
                {
                  "assignments": [
                    24460
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24460,
                      "mutability": "mutable",
                      "name": "actualEOMC",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3478:31:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 24459,
                        "name": "EndOfMonthConvention",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22580,
                        "src": "3478:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24466,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24462,
                        "name": "eomc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24388,
                        "src": "3539:4:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24463,
                        "name": "cycleStart",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24382,
                        "src": "3545:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24464,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24386,
                        "src": "3557:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      ],
                      "id": 24461,
                      "name": "adjustEndOfMonthConvention",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23969,
                      "src": "3512:26:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$returns$_t_enum$_EndOfMonthConvention_$22580_$",
                        "typeString": "function (enum EndOfMonthConvention,uint256,struct IPS memory) pure returns (enum EndOfMonthConvention)"
                      }
                    },
                    "id": 24465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3512:51:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3478:85:81"
                },
                {
                  "body": {
                    "id": 24520,
                    "nodeType": "Block",
                    "src": "3674:591:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24471,
                              "name": "date",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24453,
                              "src": "3802:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24472,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3808:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24473,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3822:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24470,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3790:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3790:43:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24495,
                        "nodeType": "IfStatement",
                        "src": "3786:231:81",
                        "trueBody": {
                          "id": 24494,
                          "nodeType": "Block",
                          "src": "3835:182:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 24476,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "3861:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24479,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 24477,
                                            "name": "MAX_CYCLE_SIZE",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22461,
                                            "src": "3870:14:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 24478,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3887:1:81",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "src": "3870:18:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 24480,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3869:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3861:28:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5363686564756c652e636f6d70757465446174657346726f6d4379636c653a204d41585f4359434c455f53495a45",
                                    "id": 24482,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3891:48:81",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_00f79481ba307948f766ffa1c895167fca1597f4cb4a26311d07d620117d4fee",
                                      "typeString": "literal_string \"Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE\""
                                    },
                                    "value": "Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_00f79481ba307948f766ffa1c895167fca1597f4cb4a26311d07d620117d4fee",
                                      "typeString": "literal_string \"Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE\""
                                    }
                                  ],
                                  "id": 24475,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "3853:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 24483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3853:87:81",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 24484,
                              "nodeType": "ExpressionStatement",
                              "src": "3853:87:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24485,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "3958:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24487,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24486,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "3964:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3958:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24488,
                                  "name": "date",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24453,
                                  "src": "3973:4:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3958:19:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24490,
                              "nodeType": "ExpressionStatement",
                              "src": "3958:19:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "3995:7:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 24491,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24409,
                                  "src": "3995:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24493,
                              "nodeType": "ExpressionStatement",
                              "src": "3995:7:81"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4031:12:81",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 24496,
                            "name": "cycleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24457,
                            "src": "4031:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24498,
                        "nodeType": "ExpressionStatement",
                        "src": "4031:12:81"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24499,
                            "name": "date",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24453,
                            "src": "4058:4:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                    "typeString": "enum EndOfMonthConvention"
                                  },
                                  "id": 24503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 24500,
                                    "name": "actualEOMC",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24460,
                                    "src": "4066:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24501,
                                      "name": "EndOfMonthConvention",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22580,
                                      "src": "4080:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                        "typeString": "type(enum EndOfMonthConvention)"
                                      }
                                    },
                                    "id": 24502,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "EOM",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4080:24:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  "src": "4066:38:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 24504,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4065:40:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 24513,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24386,
                                  "src": "4224:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 24514,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24382,
                                  "src": "4231:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 24515,
                                  "name": "cycleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24457,
                                  "src": "4243:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 24512,
                                "name": "getNextCycleDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24379,
                                "src": "4207:16:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24516,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4207:47:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "4065:189:81",
                            "trueExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 24507,
                                      "name": "cycle",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24386,
                                      "src": "4157:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 24508,
                                      "name": "cycleStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24382,
                                      "src": "4164:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 24509,
                                      "name": "cycleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24457,
                                      "src": "4176:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 24506,
                                    "name": "getNextCycleDate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24379,
                                    "src": "4140:16:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24510,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4140:47:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 24505,
                                "name": "shiftEndOfMonth",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24012,
                                "src": "4124:15:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4124:64:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4058:196:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24519,
                        "nodeType": "ExpressionStatement",
                        "src": "4058:196:81"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24467,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24453,
                      "src": "3657:4:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 24468,
                      "name": "cycleEnd",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24384,
                      "src": "3664:8:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3657:15:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24521,
                  "nodeType": "WhileStatement",
                  "src": "3650:615:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24522,
                      "name": "addEndTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24390,
                      "src": "4335:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 24523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4349:4:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4335:18:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24539,
                  "nodeType": "IfStatement",
                  "src": "4331:157:81",
                  "trueBody": {
                    "id": 24538,
                    "nodeType": "Block",
                    "src": "4355:133:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24526,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "4385:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24527,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "4395:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24528,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "4409:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24525,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "4373:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4373:47:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24537,
                        "nodeType": "IfStatement",
                        "src": "4369:109:81",
                        "trueBody": {
                          "id": 24536,
                          "nodeType": "Block",
                          "src": "4422:56:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24530,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4440:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24532,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24531,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4446:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4440:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24533,
                                  "name": "cycleEnd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24384,
                                  "src": "4455:8:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4440:23:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24535,
                              "nodeType": "ExpressionStatement",
                              "src": "4440:23:81"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24542,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24540,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24409,
                        "src": "4607:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 24541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4615:1:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4607:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 24544,
                            "name": "dates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24406,
                            "src": "4632:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                              "typeString": "uint256[120] memory"
                            }
                          },
                          "id": 24548,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 24545,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24409,
                              "src": "4638:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 24546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4646:1:81",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "4638:9:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4632:16:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24549,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24392,
                          "src": "4650:12:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24550,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24394,
                          "src": "4664:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 24543,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "4620:11:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 24551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4620:55:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4607:68:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24584,
                  "nodeType": "IfStatement",
                  "src": "4603:255:81",
                  "trueBody": {
                    "id": 24583,
                    "nodeType": "Block",
                    "src": "4677:181:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 24565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 24561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_S_$22477",
                                "typeString": "enum S"
                              },
                              "id": 24557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24553,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24386,
                                  "src": "4695:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                "id": 24554,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "s",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22483,
                                "src": "4695:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_S_$22477",
                                  "typeString": "enum S"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24555,
                                  "name": "S",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22477,
                                  "src": "4706:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_S_$22477_$",
                                    "typeString": "type(enum S)"
                                  }
                                },
                                "id": 24556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "LONG",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4706:6:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_S_$22477",
                                  "typeString": "enum S"
                                }
                              },
                              "src": "4695:17:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24560,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 24558,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24409,
                                "src": "4716:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 24559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4724:1:81",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4716:9:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "4695:30:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 24562,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "4729:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 24563,
                              "name": "date",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24453,
                              "src": "4741:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4729:16:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4695:50:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24582,
                        "nodeType": "IfStatement",
                        "src": "4691:157:81",
                        "trueBody": {
                          "id": 24581,
                          "nodeType": "Block",
                          "src": "4747:101:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24566,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4765:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24570,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 24567,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "4771:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 24568,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4779:1:81",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "4771:9:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4765:16:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24571,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4784:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24573,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24572,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4790:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4784:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4765:31:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24575,
                              "nodeType": "ExpressionStatement",
                              "src": "4765:31:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "4814:19:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24576,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4821:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24578,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24577,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4827:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4821:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 24580,
                              "nodeType": "ExpressionStatement",
                              "src": "4814:19:81"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24585,
                    "name": "dates",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24406,
                    "src": "4875:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                      "typeString": "uint256[120] memory"
                    }
                  },
                  "functionReturnParameters": 24400,
                  "id": 24586,
                  "nodeType": "Return",
                  "src": "4868:12:81"
                }
              ]
            },
            "documentation": {
              "id": 24380,
              "nodeType": "StructuredDocumentation",
              "src": "1583:796:81",
              "text": " Computes an array of timestamps that represent dates in a cycle falling within a given segment.\n @dev There are some notable edge cases: If the cycle is \"not set\" we return the start end end dates\n of the cycle if they lie within the segment. Otherwise and empty array is returned.\n @param cycleStart start time of the cycle\n @param cycleEnd end time of the cycle\n @param cycle IPS cycle\n @param eomc end of month convention\n @param addEndTime timestamp of the end of the cycle should be added to the result if it falls in the segment\n @param segmentStart start time of the segment\n @param segmentEnd end time of the segment\n @return an array of timestamps from the given cycle that fall within the specified segement"
            },
            "id": 24588,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeDatesFromCycleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24382,
                  "mutability": "mutable",
                  "name": "cycleStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2431:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24381,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2431:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24384,
                  "mutability": "mutable",
                  "name": "cycleEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2459:16:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2459:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24386,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2485:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24385,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "2485:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24388,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2511:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24387,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "2511:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24390,
                  "mutability": "mutable",
                  "name": "addEndTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2546:15:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24389,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2546:4:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24392,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2571:20:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24394,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2601:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2601:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2421:204:81"
            },
            "returnParameters": {
              "id": 24400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24399,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2673:30:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                    "typeString": "uint256[120]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24396,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2673:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24398,
                    "length": {
                      "argumentTypes": null,
                      "id": 24397,
                      "name": "MAX_CYCLE_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22461,
                      "src": "2681:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2673:23:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                      "typeString": "uint256[120]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2672:32:81"
            },
            "scope": 24668,
            "src": "2384:2503:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24636,
              "nodeType": "Block",
              "src": "5325:310:81",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 24605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24602,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24591,
                          "src": "5339:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        "id": 24603,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22485,
                        "src": "5339:11:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 24604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5354:5:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      "src": "5339:20:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24606,
                        "name": "precedingDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24597,
                        "src": "5363:13:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 24607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5380:1:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5363:18:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5339:42:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24612,
                  "nodeType": "IfStatement",
                  "src": "5335:65:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 24610,
                      "name": "anchorDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24595,
                      "src": "5390:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 24601,
                    "id": 24611,
                    "nodeType": "Return",
                    "src": "5383:17:81"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                            "typeString": "enum EndOfMonthConvention"
                          },
                          "id": 24620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 24614,
                                "name": "eomc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24593,
                                "src": "5446:4:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 24615,
                                "name": "anchorDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24595,
                                "src": "5452:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 24616,
                                "name": "cycle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24591,
                                "src": "5464:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              ],
                              "id": 24613,
                              "name": "adjustEndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23969,
                              "src": "5419:26:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$returns$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "function (enum EndOfMonthConvention,uint256,struct IPS memory) pure returns (enum EndOfMonthConvention)"
                              }
                            },
                            "id": 24617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5419:51:81",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24618,
                              "name": "EndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22580,
                              "src": "5474:20:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "type(enum EndOfMonthConvention)"
                              }
                            },
                            "id": 24619,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "EOM",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5474:24:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "src": "5419:79:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 24621,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5418:81:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 24630,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24591,
                          "src": "5604:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24631,
                          "name": "precedingDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24597,
                          "src": "5611:13:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 24632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5626:1:81",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          }
                        ],
                        "id": 24629,
                        "name": "getNextCycleDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24379,
                        "src": "5587:16:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5587:41:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5418:210:81",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24624,
                              "name": "cycle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24591,
                              "src": "5547:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24625,
                              "name": "precedingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24597,
                              "src": "5554:13:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 24626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5569:1:81",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 24623,
                            "name": "getNextCycleDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24379,
                            "src": "5530:16:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 24627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5530:41:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 24622,
                        "name": "shiftEndOfMonth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24012,
                        "src": "5514:15:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5514:58:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24601,
                  "id": 24635,
                  "nodeType": "Return",
                  "src": "5411:217:81"
                }
              ]
            },
            "documentation": {
              "id": 24589,
              "nodeType": "StructuredDocumentation",
              "src": "4893:194:81",
              "text": " Computes the next date for a given an IPS cycle.\n @param cycle IPS cycle\n @param precedingDate the previous date of the cycle\n @return next date of the cycle"
            },
            "id": 24637,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCycleDateFromPrecedingDate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24591,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5148:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24590,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "5148:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24593,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5174:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24592,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "5174:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24595,
                  "mutability": "mutable",
                  "name": "anchorDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5209:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5209:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24597,
                  "mutability": "mutable",
                  "name": "precedingDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5237:21:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24596,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5237:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5138:126:81"
            },
            "returnParameters": {
              "id": 24601,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24600,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5312:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24599,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5312:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5311:9:81"
            },
            "scope": 24668,
            "src": "5092:543:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24666,
              "nodeType": "Block",
              "src": "5887:169:81",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24648,
                      "name": "startTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24641,
                      "src": "5901:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 24649,
                      "name": "endTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24643,
                      "src": "5918:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5901:29:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24653,
                  "nodeType": "IfStatement",
                  "src": "5897:47:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 24651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5939:5:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 24647,
                    "id": 24652,
                    "nodeType": "Return",
                    "src": "5932:12:81"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24654,
                        "name": "startTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24641,
                        "src": "5958:14:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 24655,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24639,
                        "src": "5976:9:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5958:27:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24657,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24639,
                        "src": "5989:9:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 24658,
                        "name": "endTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24643,
                        "src": "6002:12:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5989:25:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5958:56:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24663,
                  "nodeType": "IfStatement",
                  "src": "5954:73:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 24661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6023:4:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "functionReturnParameters": 24647,
                    "id": 24662,
                    "nodeType": "Return",
                    "src": "6016:11:81"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 24664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6044:5:81",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 24647,
                  "id": 24665,
                  "nodeType": "Return",
                  "src": "6037:12:81"
                }
              ]
            },
            "documentation": null,
            "id": 24667,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isInSegment",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24639,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5744:17:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24638,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5744:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24641,
                  "mutability": "mutable",
                  "name": "startTimestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5771:22:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5771:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24643,
                  "mutability": "mutable",
                  "name": "endTimestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5803:20:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24642,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5803:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5734:95:81"
            },
            "returnParameters": {
              "id": 24647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24646,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5877:4:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24645,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5877:4:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5876:6:81"
            },
            "scope": 24668,
            "src": "5714:342:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24669,
        "src": "397:5661:81"
      }
    ],
    "src": "41:6018:81"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol",
    "exportedSymbols": {
      "CycleUtils": [
        24668
      ]
    },
    "id": 24669,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 24232,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:81"
      },
      {
        "id": 24233,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:81"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "file": "../../external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol",
        "id": 24234,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 37178,
        "src": "101:68:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol",
        "file": "../ACTUSTypes.sol",
        "id": 24235,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 23007,
        "src": "171:27:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol",
        "file": "../ACTUSConstants.sol",
        "id": 24236,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 22466,
        "src": "199:31:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol",
        "file": "../Conventions/EndOfMonthConventions.sol",
        "id": 24237,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 24014,
        "src": "231:50:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol",
        "file": "./PeriodUtils.sol",
        "id": 24238,
        "nodeType": "ImportDirective",
        "scope": 24669,
        "sourceUnit": 24886,
        "src": "282:27:81",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24240,
              "name": "ACTUSConstants",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22465,
              "src": "420:14:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ACTUSConstants_$22465",
                "typeString": "contract ACTUSConstants"
              }
            },
            "id": 24241,
            "nodeType": "InheritanceSpecifier",
            "src": "420:14:81"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24242,
              "name": "EndOfMonthConventions",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24013,
              "src": "436:21:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EndOfMonthConventions_$24013",
                "typeString": "contract EndOfMonthConventions"
              }
            },
            "id": 24243,
            "nodeType": "InheritanceSpecifier",
            "src": "436:21:81"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 24244,
              "name": "PeriodUtils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24885,
              "src": "459:11:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PeriodUtils_$24885",
                "typeString": "contract PeriodUtils"
              }
            },
            "id": 24245,
            "nodeType": "InheritanceSpecifier",
            "src": "459:11:81"
          }
        ],
        "contractDependencies": [
          22465,
          24013,
          24885
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 24239,
          "nodeType": "StructuredDocumentation",
          "src": "312:84:81",
          "text": " @title Schedule\n @notice Methods related to generating event schedules."
        },
        "fullyImplemented": true,
        "id": 24668,
        "linearizedBaseContracts": [
          24668,
          24885,
          24013,
          22465
        ],
        "name": "CycleUtils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 24248,
            "libraryName": {
              "contractScope": null,
              "id": 24246,
              "name": "BokkyPooBahsDateTimeLibrary",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 37177,
              "src": "484:27:81",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BokkyPooBahsDateTimeLibrary_$37177",
                "typeString": "library BokkyPooBahsDateTimeLibrary"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "478:43:81",
            "typeName": {
              "id": 24247,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "516:4:81",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 24378,
              "nodeType": "Block",
              "src": "764:813:81",
              "statements": [
                {
                  "assignments": [
                    24261
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24261,
                      "mutability": "mutable",
                      "name": "newTimestamp",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24378,
                      "src": "774:20:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24260,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "774:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24262,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "774:20:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_P_$22474",
                      "typeString": "enum P"
                    },
                    "id": 24267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24263,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24251,
                        "src": "809:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      },
                      "id": 24264,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "p",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22481,
                      "src": "809:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24265,
                        "name": "P",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22474,
                        "src": "820:1:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                          "typeString": "type(enum P)"
                        }
                      },
                      "id": 24266,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "D",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "820:3:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      }
                    },
                    "src": "809:14:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_enum$_P_$22474",
                        "typeString": "enum P"
                      },
                      "id": 24283,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24279,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24251,
                          "src": "915:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        "id": 24280,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "p",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22481,
                        "src": "915:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24281,
                          "name": "P",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22474,
                          "src": "926:1:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                            "typeString": "type(enum P)"
                          }
                        },
                        "id": 24282,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "W",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "926:3:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        }
                      },
                      "src": "915:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_P_$22474",
                          "typeString": "enum P"
                        },
                        "id": 24301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24297,
                            "name": "cycle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24251,
                            "src": "1025:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                              "typeString": "struct IPS memory"
                            }
                          },
                          "id": 24298,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "p",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22481,
                          "src": "1025:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 24299,
                            "name": "P",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22474,
                            "src": "1036:1:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                              "typeString": "type(enum P)"
                            }
                          },
                          "id": 24300,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "M",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1036:3:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          }
                        },
                        "src": "1025:14:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_P_$22474",
                            "typeString": "enum P"
                          },
                          "id": 24317,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24313,
                              "name": "cycle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24251,
                              "src": "1133:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              }
                            },
                            "id": 24314,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "p",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22481,
                            "src": "1133:7:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24315,
                              "name": "P",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22474,
                              "src": "1144:1:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                "typeString": "type(enum P)"
                              }
                            },
                            "id": 24316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "Q",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "1144:3:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            }
                          },
                          "src": "1133:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_enum$_P_$22474",
                              "typeString": "enum P"
                            },
                            "id": 24335,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24331,
                                "name": "cycle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24251,
                                "src": "1245:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              },
                              "id": 24332,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "p",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22481,
                              "src": "1245:7:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 24333,
                                "name": "P",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22474,
                                "src": "1256:1:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                  "typeString": "type(enum P)"
                                }
                              },
                              "id": 24334,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "H",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "1256:3:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              }
                            },
                            "src": "1245:14:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_P_$22474",
                                "typeString": "enum P"
                              },
                              "id": 24353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24349,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24251,
                                  "src": "1357:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                "id": 24350,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "p",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22481,
                                "src": "1357:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24351,
                                  "name": "P",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22474,
                                  "src": "1368:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_P_$22474_$",
                                    "typeString": "type(enum P)"
                                  }
                                },
                                "id": 24352,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "Y",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "1368:3:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_P_$22474",
                                  "typeString": "enum P"
                                }
                              },
                              "src": "1357:14:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 24369,
                              "nodeType": "Block",
                              "src": "1460:81:81",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "5363686564756c652e6765744e6578744379636c65446174653a204154545249425554455f4e4f545f464f554e44",
                                        "id": 24366,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1481:48:81",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_053fe059272c007eabb5b289a27c337d183359dd93ab091e047b32ff8a9e02e8",
                                          "typeString": "literal_string \"Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND\""
                                        },
                                        "value": "Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_053fe059272c007eabb5b289a27c337d183359dd93ab091e047b32ff8a9e02e8",
                                          "typeString": "literal_string \"Schedule.getNextCycleDate: ATTRIBUTE_NOT_FOUND\""
                                        }
                                      ],
                                      "id": 24365,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "1474:6:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 24367,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1474:56:81",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 24368,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1474:56:81"
                                }
                              ]
                            },
                            "id": 24370,
                            "nodeType": "IfStatement",
                            "src": "1353:188:81",
                            "trueBody": {
                              "id": 24364,
                              "nodeType": "Block",
                              "src": "1373:81:81",
                              "statements": [
                                {
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24362,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "argumentTypes": null,
                                      "id": 24354,
                                      "name": "newTimestamp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24261,
                                      "src": "1387:12:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24360,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 24357,
                                              "name": "cycle",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 24251,
                                              "src": "1422:5:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                                "typeString": "struct IPS memory"
                                              }
                                            },
                                            "id": 24358,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "i",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22479,
                                            "src": "1422:7:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "id": 24359,
                                            "name": "cycleIndex",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24255,
                                            "src": "1432:10:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "1422:20:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 24355,
                                          "name": "cycleStart",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24253,
                                          "src": "1402:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 24356,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "addYears",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36574,
                                        "src": "1402:19:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 24361,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1402:41:81",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1387:56:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24363,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1387:56:81"
                                }
                              ]
                            }
                          },
                          "id": 24371,
                          "nodeType": "IfStatement",
                          "src": "1241:300:81",
                          "trueBody": {
                            "id": 24348,
                            "nodeType": "Block",
                            "src": "1261:86:81",
                            "statements": [
                              {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "id": 24336,
                                    "name": "newTimestamp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24261,
                                    "src": "1275:12:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24344,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24342,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 24339,
                                              "name": "cycle",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 24251,
                                              "src": "1311:5:81",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                                "typeString": "struct IPS memory"
                                              }
                                            },
                                            "id": 24340,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "i",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 22479,
                                            "src": "1311:7:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "36",
                                            "id": 24341,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1321:1:81",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_6_by_1",
                                              "typeString": "int_const 6"
                                            },
                                            "value": "6"
                                          },
                                          "src": "1311:11:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "id": 24343,
                                          "name": "cycleIndex",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 24255,
                                          "src": "1325:10:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "1311:24:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24337,
                                        "name": "cycleStart",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24253,
                                        "src": "1290:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 24338,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "addMonths",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 36656,
                                      "src": "1290:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 24345,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1290:46:81",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "1275:61:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24347,
                                "nodeType": "ExpressionStatement",
                                "src": "1275:61:81"
                              }
                            ]
                          }
                        },
                        "id": 24372,
                        "nodeType": "IfStatement",
                        "src": "1129:412:81",
                        "trueBody": {
                          "id": 24330,
                          "nodeType": "Block",
                          "src": "1149:86:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 24318,
                                  "name": "newTimestamp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24261,
                                  "src": "1163:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 24326,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 24324,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 24321,
                                            "name": "cycle",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 24251,
                                            "src": "1199:5:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                              "typeString": "struct IPS memory"
                                            }
                                          },
                                          "id": 24322,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "i",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 22479,
                                          "src": "1199:7:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "33",
                                          "id": 24323,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "1209:1:81",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_3_by_1",
                                            "typeString": "int_const 3"
                                          },
                                          "value": "3"
                                        },
                                        "src": "1199:11:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "argumentTypes": null,
                                        "id": 24325,
                                        "name": "cycleIndex",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24255,
                                        "src": "1213:10:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "1199:24:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24319,
                                      "name": "cycleStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24253,
                                      "src": "1178:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 24320,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "addMonths",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 36656,
                                    "src": "1178:20:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24327,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1178:46:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1163:61:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24329,
                              "nodeType": "ExpressionStatement",
                              "src": "1163:61:81"
                            }
                          ]
                        }
                      },
                      "id": 24373,
                      "nodeType": "IfStatement",
                      "src": "1021:520:81",
                      "trueBody": {
                        "id": 24312,
                        "nodeType": "Block",
                        "src": "1041:82:81",
                        "statements": [
                          {
                            "expression": {
                              "argumentTypes": null,
                              "id": 24310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "argumentTypes": null,
                                "id": 24302,
                                "name": "newTimestamp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24261,
                                "src": "1055:12:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24308,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24305,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24251,
                                        "src": "1091:5:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 24306,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "i",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22479,
                                      "src": "1091:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 24307,
                                      "name": "cycleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24255,
                                      "src": "1101:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "1091:20:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24303,
                                    "name": "cycleStart",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24253,
                                    "src": "1070:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 24304,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "addMonths",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 36656,
                                  "src": "1070:20:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 24309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1070:42:81",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1055:57:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24311,
                            "nodeType": "ExpressionStatement",
                            "src": "1055:57:81"
                          }
                        ]
                      }
                    },
                    "id": 24374,
                    "nodeType": "IfStatement",
                    "src": "911:630:81",
                    "trueBody": {
                      "id": 24296,
                      "nodeType": "Block",
                      "src": "931:84:81",
                      "statements": [
                        {
                          "expression": {
                            "argumentTypes": null,
                            "id": 24294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "argumentTypes": null,
                              "id": 24284,
                              "name": "newTimestamp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24261,
                              "src": "945:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 24292,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24290,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 24287,
                                        "name": "cycle",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 24251,
                                        "src": "979:5:81",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                          "typeString": "struct IPS memory"
                                        }
                                      },
                                      "id": 24288,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "i",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 22479,
                                      "src": "979:7:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "37",
                                      "id": 24289,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "989:1:81",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_7_by_1",
                                        "typeString": "int_const 7"
                                      },
                                      "value": "7"
                                    },
                                    "src": "979:11:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 24291,
                                    "name": "cycleIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24255,
                                    "src": "993:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "979:24:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24285,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24253,
                                  "src": "960:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "addDays",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36680,
                                "src": "960:18:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24293,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "960:44:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "945:59:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 24295,
                          "nodeType": "ExpressionStatement",
                          "src": "945:59:81"
                        }
                      ]
                    }
                  },
                  "id": 24375,
                  "nodeType": "IfStatement",
                  "src": "805:736:81",
                  "trueBody": {
                    "id": 24278,
                    "nodeType": "Block",
                    "src": "825:80:81",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24268,
                            "name": "newTimestamp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24261,
                            "src": "839:12:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 24274,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 24271,
                                    "name": "cycle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24251,
                                    "src": "873:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                      "typeString": "struct IPS memory"
                                    }
                                  },
                                  "id": 24272,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "i",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 22479,
                                  "src": "873:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 24273,
                                  "name": "cycleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24255,
                                  "src": "883:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "873:20:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 24269,
                                "name": "cycleStart",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24253,
                                "src": "854:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "addDays",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36680,
                              "src": "854:18:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 24275,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "854:40:81",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "839:55:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24277,
                        "nodeType": "ExpressionStatement",
                        "src": "839:55:81"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24376,
                    "name": "newTimestamp",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24261,
                    "src": "1558:12:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24259,
                  "id": 24377,
                  "nodeType": "Return",
                  "src": "1551:19:81"
                }
              ]
            },
            "documentation": {
              "id": 24249,
              "nodeType": "StructuredDocumentation",
              "src": "527:88:81",
              "text": " @notice Applies the cycle n - times (n := cycleIndex) to a given date"
            },
            "id": 24379,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getNextCycleDate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24251,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "646:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24250,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "646:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24253,
                  "mutability": "mutable",
                  "name": "cycleStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "664:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24252,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "664:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24255,
                  "mutability": "mutable",
                  "name": "cycleIndex",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "684:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24254,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "684:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "645:58:81"
            },
            "returnParameters": {
              "id": 24259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24258,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24379,
                  "src": "751:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24257,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "751:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "750:9:81"
            },
            "scope": 24668,
            "src": "620:957:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24587,
              "nodeType": "Block",
              "src": "2709:2178:81",
              "statements": [
                {
                  "assignments": [
                    24406
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24406,
                      "mutability": "mutable",
                      "name": "dates",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "2719:36:81",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                        "typeString": "uint256[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 24404,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2719:7:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24405,
                        "length": {
                          "argumentTypes": null,
                          "id": 24403,
                          "name": "MAX_CYCLE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22461,
                          "src": "2727:14:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "2719:23:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                          "typeString": "uint256[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24407,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2719:36:81"
                },
                {
                  "assignments": [
                    24409
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24409,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "2765:13:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24408,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2765:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24410,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2765:13:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24414,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 24411,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24386,
                        "src": "3048:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      },
                      "id": 24412,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isSet",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22485,
                      "src": "3048:11:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 24413,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3063:5:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "3048:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24451,
                  "nodeType": "IfStatement",
                  "src": "3044:360:81",
                  "trueBody": {
                    "id": 24450,
                    "nodeType": "Block",
                    "src": "3070:334:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24416,
                              "name": "cycleStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24382,
                              "src": "3100:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24417,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3112:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24418,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3126:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24415,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3088:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3088:49:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24430,
                        "nodeType": "IfStatement",
                        "src": "3084:138:81",
                        "trueBody": {
                          "id": 24429,
                          "nodeType": "Block",
                          "src": "3139:83:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24424,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24420,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "3157:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24422,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24421,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "3163:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3157:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24423,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24382,
                                  "src": "3172:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3157:25:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24425,
                              "nodeType": "ExpressionStatement",
                              "src": "3157:25:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "3200:7:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 24426,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24409,
                                  "src": "3200:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24428,
                              "nodeType": "ExpressionStatement",
                              "src": "3200:7:81"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24432,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "3251:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24433,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3261:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24434,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3275:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24431,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3239:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3239:47:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24447,
                        "nodeType": "IfStatement",
                        "src": "3235:133:81",
                        "trueBody": {
                          "id": 24446,
                          "nodeType": "Block",
                          "src": "3288:80:81",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 24438,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 24436,
                                  "name": "addEndTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24390,
                                  "src": "3310:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 24437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3324:4:81",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "3310:18:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 24445,
                              "nodeType": "IfStatement",
                              "src": "3306:47:81",
                              "trueBody": {
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 24439,
                                      "name": "dates",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24406,
                                      "src": "3330:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                        "typeString": "uint256[120] memory"
                                      }
                                    },
                                    "id": 24441,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 24440,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "3336:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": true,
                                    "nodeType": "IndexAccess",
                                    "src": "3330:12:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "argumentTypes": null,
                                    "id": 24442,
                                    "name": "cycleEnd",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24384,
                                    "src": "3345:8:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "3330:23:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 24444,
                                "nodeType": "ExpressionStatement",
                                "src": "3330:23:81"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24448,
                          "name": "dates",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24406,
                          "src": "3388:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                            "typeString": "uint256[120] memory"
                          }
                        },
                        "functionReturnParameters": 24400,
                        "id": 24449,
                        "nodeType": "Return",
                        "src": "3381:12:81"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    24453
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24453,
                      "mutability": "mutable",
                      "name": "date",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3414:12:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24452,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3414:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24455,
                  "initialValue": {
                    "argumentTypes": null,
                    "id": 24454,
                    "name": "cycleStart",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24382,
                    "src": "3429:10:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3414:25:81"
                },
                {
                  "assignments": [
                    24457
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24457,
                      "mutability": "mutable",
                      "name": "cycleIndex",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3449:18:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 24456,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3449:7:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24458,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3449:18:81"
                },
                {
                  "assignments": [
                    24460
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 24460,
                      "mutability": "mutable",
                      "name": "actualEOMC",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 24587,
                      "src": "3478:31:81",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                        "typeString": "enum EndOfMonthConvention"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 24459,
                        "name": "EndOfMonthConvention",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22580,
                        "src": "3478:20:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 24466,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 24462,
                        "name": "eomc",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24388,
                        "src": "3539:4:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24463,
                        "name": "cycleStart",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24382,
                        "src": "3545:10:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 24464,
                        "name": "cycle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24386,
                        "src": "3557:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                          "typeString": "enum EndOfMonthConvention"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                          "typeString": "struct IPS memory"
                        }
                      ],
                      "id": 24461,
                      "name": "adjustEndOfMonthConvention",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23969,
                      "src": "3512:26:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$returns$_t_enum$_EndOfMonthConvention_$22580_$",
                        "typeString": "function (enum EndOfMonthConvention,uint256,struct IPS memory) pure returns (enum EndOfMonthConvention)"
                      }
                    },
                    "id": 24465,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3512:51:81",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3478:85:81"
                },
                {
                  "body": {
                    "id": 24520,
                    "nodeType": "Block",
                    "src": "3674:591:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24471,
                              "name": "date",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24453,
                              "src": "3802:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24472,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "3808:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24473,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "3822:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24470,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "3790:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3790:43:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24495,
                        "nodeType": "IfStatement",
                        "src": "3786:231:81",
                        "trueBody": {
                          "id": 24494,
                          "nodeType": "Block",
                          "src": "3835:182:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 24476,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "3861:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 24479,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "id": 24477,
                                            "name": "MAX_CYCLE_SIZE",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 22461,
                                            "src": "3870:14:81",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "hexValue": "32",
                                            "id": 24478,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3887:1:81",
                                            "subdenomination": null,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            },
                                            "value": "2"
                                          },
                                          "src": "3870:18:81",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 24480,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "3869:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3861:28:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5363686564756c652e636f6d70757465446174657346726f6d4379636c653a204d41585f4359434c455f53495a45",
                                    "id": 24482,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3891:48:81",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_00f79481ba307948f766ffa1c895167fca1597f4cb4a26311d07d620117d4fee",
                                      "typeString": "literal_string \"Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE\""
                                    },
                                    "value": "Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_00f79481ba307948f766ffa1c895167fca1597f4cb4a26311d07d620117d4fee",
                                      "typeString": "literal_string \"Schedule.computeDatesFromCycle: MAX_CYCLE_SIZE\""
                                    }
                                  ],
                                  "id": 24475,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "3853:7:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 24483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3853:87:81",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 24484,
                              "nodeType": "ExpressionStatement",
                              "src": "3853:87:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24485,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "3958:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24487,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24486,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "3964:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "3958:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24488,
                                  "name": "date",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24453,
                                  "src": "3973:4:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3958:19:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24490,
                              "nodeType": "ExpressionStatement",
                              "src": "3958:19:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24492,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "3995:7:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 24491,
                                  "name": "index",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24409,
                                  "src": "3995:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24493,
                              "nodeType": "ExpressionStatement",
                              "src": "3995:7:81"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4031:12:81",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 24496,
                            "name": "cycleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24457,
                            "src": "4031:10:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24498,
                        "nodeType": "ExpressionStatement",
                        "src": "4031:12:81"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 24518,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 24499,
                            "name": "date",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24453,
                            "src": "4058:4:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                    "typeString": "enum EndOfMonthConvention"
                                  },
                                  "id": 24503,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 24500,
                                    "name": "actualEOMC",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24460,
                                    "src": "4066:10:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 24501,
                                      "name": "EndOfMonthConvention",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22580,
                                      "src": "4080:20:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                        "typeString": "type(enum EndOfMonthConvention)"
                                      }
                                    },
                                    "id": 24502,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberName": "EOM",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4080:24:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                      "typeString": "enum EndOfMonthConvention"
                                    }
                                  },
                                  "src": "4066:38:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 24504,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "4065:40:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 24513,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24386,
                                  "src": "4224:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 24514,
                                  "name": "cycleStart",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24382,
                                  "src": "4231:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 24515,
                                  "name": "cycleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24457,
                                  "src": "4243:10:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 24512,
                                "name": "getNextCycleDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24379,
                                "src": "4207:16:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24516,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4207:47:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 24517,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "4065:189:81",
                            "trueExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 24507,
                                      "name": "cycle",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24386,
                                      "src": "4157:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 24508,
                                      "name": "cycleStart",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24382,
                                      "src": "4164:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    {
                                      "argumentTypes": null,
                                      "id": 24509,
                                      "name": "cycleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24457,
                                      "src": "4176:10:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                        "typeString": "struct IPS memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 24506,
                                    "name": "getNextCycleDate",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24379,
                                    "src": "4140:16:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 24510,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4140:47:81",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 24505,
                                "name": "shiftEndOfMonth",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24012,
                                "src": "4124:15:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 24511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4124:64:81",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4058:196:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 24519,
                        "nodeType": "ExpressionStatement",
                        "src": "4058:196:81"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24467,
                      "name": "date",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24453,
                      "src": "3657:4:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 24468,
                      "name": "cycleEnd",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24384,
                      "src": "3664:8:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3657:15:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 24521,
                  "nodeType": "WhileStatement",
                  "src": "3650:615:81"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24522,
                      "name": "addEndTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24390,
                      "src": "4335:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 24523,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4349:4:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4335:18:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24539,
                  "nodeType": "IfStatement",
                  "src": "4331:157:81",
                  "trueBody": {
                    "id": 24538,
                    "nodeType": "Block",
                    "src": "4355:133:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24526,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "4385:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24527,
                              "name": "segmentStart",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24392,
                              "src": "4395:12:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24528,
                              "name": "segmentEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24394,
                              "src": "4409:10:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 24525,
                            "name": "isInSegment",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24667,
                            "src": "4373:11:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                            }
                          },
                          "id": 24529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4373:47:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24537,
                        "nodeType": "IfStatement",
                        "src": "4369:109:81",
                        "trueBody": {
                          "id": 24536,
                          "nodeType": "Block",
                          "src": "4422:56:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24530,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4440:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24532,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24531,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4446:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4440:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 24533,
                                  "name": "cycleEnd",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24384,
                                  "src": "4455:8:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4440:23:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24535,
                              "nodeType": "ExpressionStatement",
                              "src": "4440:23:81"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24542,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24540,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24409,
                        "src": "4607:5:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 24541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4615:1:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4607:9:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 24544,
                            "name": "dates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24406,
                            "src": "4632:5:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                              "typeString": "uint256[120] memory"
                            }
                          },
                          "id": 24548,
                          "indexExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 24545,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24409,
                              "src": "4638:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 24546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4646:1:81",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "4638:9:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4632:16:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24549,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24392,
                          "src": "4650:12:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24550,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24394,
                          "src": "4664:10:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 24543,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "4620:11:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 24551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4620:55:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4607:68:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24584,
                  "nodeType": "IfStatement",
                  "src": "4603:255:81",
                  "trueBody": {
                    "id": 24583,
                    "nodeType": "Block",
                    "src": "4677:181:81",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 24565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 24561,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_S_$22477",
                                "typeString": "enum S"
                              },
                              "id": 24557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24553,
                                  "name": "cycle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24386,
                                  "src": "4695:5:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                    "typeString": "struct IPS memory"
                                  }
                                },
                                "id": 24554,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "s",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22483,
                                "src": "4695:7:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_S_$22477",
                                  "typeString": "enum S"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 24555,
                                  "name": "S",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22477,
                                  "src": "4706:1:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_S_$22477_$",
                                    "typeString": "type(enum S)"
                                  }
                                },
                                "id": 24556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "LONG",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4706:6:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_S_$22477",
                                  "typeString": "enum S"
                                }
                              },
                              "src": "4695:17:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 24560,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 24558,
                                "name": "index",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24409,
                                "src": "4716:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 24559,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4724:1:81",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "4716:9:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "4695:30:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 24564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 24562,
                              "name": "cycleEnd",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24384,
                              "src": "4729:8:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "argumentTypes": null,
                              "id": 24563,
                              "name": "date",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24453,
                              "src": "4741:4:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4729:16:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4695:50:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 24582,
                        "nodeType": "IfStatement",
                        "src": "4691:157:81",
                        "trueBody": {
                          "id": 24581,
                          "nodeType": "Block",
                          "src": "4747:101:81",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24566,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4765:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24570,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 24569,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "id": 24567,
                                      "name": "index",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 24409,
                                      "src": "4771:5:81",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 24568,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4779:1:81",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "4771:9:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4765:16:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24571,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4784:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24573,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24572,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4790:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4784:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4765:31:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 24575,
                              "nodeType": "ExpressionStatement",
                              "src": "4765:31:81"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 24579,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "delete",
                                "prefix": true,
                                "src": "4814:19:81",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 24576,
                                    "name": "dates",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24406,
                                    "src": "4821:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                                      "typeString": "uint256[120] memory"
                                    }
                                  },
                                  "id": 24578,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 24577,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 24409,
                                    "src": "4827:5:81",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4821:12:81",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 24580,
                              "nodeType": "ExpressionStatement",
                              "src": "4814:19:81"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 24585,
                    "name": "dates",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 24406,
                    "src": "4875:5:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                      "typeString": "uint256[120] memory"
                    }
                  },
                  "functionReturnParameters": 24400,
                  "id": 24586,
                  "nodeType": "Return",
                  "src": "4868:12:81"
                }
              ]
            },
            "documentation": {
              "id": 24380,
              "nodeType": "StructuredDocumentation",
              "src": "1583:796:81",
              "text": " Computes an array of timestamps that represent dates in a cycle falling within a given segment.\n @dev There are some notable edge cases: If the cycle is \"not set\" we return the start end end dates\n of the cycle if they lie within the segment. Otherwise and empty array is returned.\n @param cycleStart start time of the cycle\n @param cycleEnd end time of the cycle\n @param cycle IPS cycle\n @param eomc end of month convention\n @param addEndTime timestamp of the end of the cycle should be added to the result if it falls in the segment\n @param segmentStart start time of the segment\n @param segmentEnd end time of the segment\n @return an array of timestamps from the given cycle that fall within the specified segement"
            },
            "id": 24588,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeDatesFromCycleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24382,
                  "mutability": "mutable",
                  "name": "cycleStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2431:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24381,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2431:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24384,
                  "mutability": "mutable",
                  "name": "cycleEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2459:16:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24383,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2459:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24386,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2485:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24385,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "2485:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24388,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2511:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24387,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "2511:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24390,
                  "mutability": "mutable",
                  "name": "addEndTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2546:15:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24389,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2546:4:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24392,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2571:20:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2571:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24394,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2601:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2601:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2421:204:81"
            },
            "returnParameters": {
              "id": 24400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24399,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24588,
                  "src": "2673:30:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$120_memory_ptr",
                    "typeString": "uint256[120]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 24396,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2673:7:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24398,
                    "length": {
                      "argumentTypes": null,
                      "id": 24397,
                      "name": "MAX_CYCLE_SIZE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22461,
                      "src": "2681:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2673:23:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$120_storage_ptr",
                      "typeString": "uint256[120]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2672:32:81"
            },
            "scope": 24668,
            "src": "2384:2503:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24636,
              "nodeType": "Block",
              "src": "5325:310:81",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 24605,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 24602,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24591,
                          "src": "5339:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        "id": 24603,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isSet",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22485,
                        "src": "5339:11:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 24604,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5354:5:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      },
                      "src": "5339:20:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24606,
                        "name": "precedingDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24597,
                        "src": "5363:13:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 24607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5380:1:81",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "5363:18:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5339:42:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24612,
                  "nodeType": "IfStatement",
                  "src": "5335:65:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 24610,
                      "name": "anchorDate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24595,
                      "src": "5390:10:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 24601,
                    "id": 24611,
                    "nodeType": "Return",
                    "src": "5383:17:81"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                            "typeString": "enum EndOfMonthConvention"
                          },
                          "id": 24620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 24614,
                                "name": "eomc",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24593,
                                "src": "5446:4:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 24615,
                                "name": "anchorDate",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24595,
                                "src": "5452:10:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 24616,
                                "name": "cycle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24591,
                                "src": "5464:5:81",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                                  "typeString": "enum EndOfMonthConvention"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                  "typeString": "struct IPS memory"
                                }
                              ],
                              "id": 24613,
                              "name": "adjustEndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23969,
                              "src": "5419:26:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EndOfMonthConvention_$22580_$_t_uint256_$_t_struct$_IPS_$22486_memory_ptr_$returns$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "function (enum EndOfMonthConvention,uint256,struct IPS memory) pure returns (enum EndOfMonthConvention)"
                              }
                            },
                            "id": 24617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5419:51:81",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 24618,
                              "name": "EndOfMonthConvention",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22580,
                              "src": "5474:20:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_EndOfMonthConvention_$22580_$",
                                "typeString": "type(enum EndOfMonthConvention)"
                              }
                            },
                            "id": 24619,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "EOM",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5474:24:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                              "typeString": "enum EndOfMonthConvention"
                            }
                          },
                          "src": "5419:79:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 24621,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5418:81:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 24630,
                          "name": "cycle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24591,
                          "src": "5604:5:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 24631,
                          "name": "precedingDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 24597,
                          "src": "5611:13:81",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 24632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5626:1:81",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                            "typeString": "struct IPS memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          }
                        ],
                        "id": 24629,
                        "name": "getNextCycleDate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24379,
                        "src": "5587:16:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5587:41:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 24634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5418:210:81",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 24624,
                              "name": "cycle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24591,
                              "src": "5547:5:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 24625,
                              "name": "precedingDate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24597,
                              "src": "5554:13:81",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 24626,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5569:1:81",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                                "typeString": "struct IPS memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 24623,
                            "name": "getNextCycleDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 24379,
                            "src": "5530:16:81",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_struct$_IPS_$22486_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (struct IPS memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 24627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5530:41:81",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 24622,
                        "name": "shiftEndOfMonth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24012,
                        "src": "5514:15:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256) pure returns (uint256)"
                        }
                      },
                      "id": 24628,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5514:58:81",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 24601,
                  "id": 24635,
                  "nodeType": "Return",
                  "src": "5411:217:81"
                }
              ]
            },
            "documentation": {
              "id": 24589,
              "nodeType": "StructuredDocumentation",
              "src": "4893:194:81",
              "text": " Computes the next date for a given an IPS cycle.\n @param cycle IPS cycle\n @param precedingDate the previous date of the cycle\n @return next date of the cycle"
            },
            "id": 24637,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCycleDateFromPrecedingDate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24598,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24591,
                  "mutability": "mutable",
                  "name": "cycle",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5148:16:81",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IPS_$22486_memory_ptr",
                    "typeString": "struct IPS"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24590,
                    "name": "IPS",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22486,
                    "src": "5148:3:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_IPS_$22486_storage_ptr",
                      "typeString": "struct IPS"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24593,
                  "mutability": "mutable",
                  "name": "eomc",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5174:25:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                    "typeString": "enum EndOfMonthConvention"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 24592,
                    "name": "EndOfMonthConvention",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22580,
                    "src": "5174:20:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EndOfMonthConvention_$22580",
                      "typeString": "enum EndOfMonthConvention"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24595,
                  "mutability": "mutable",
                  "name": "anchorDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5209:18:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5209:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24597,
                  "mutability": "mutable",
                  "name": "precedingDate",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5237:21:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24596,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5237:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5138:126:81"
            },
            "returnParameters": {
              "id": 24601,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24600,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24637,
                  "src": "5312:7:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24599,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5312:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5311:9:81"
            },
            "scope": 24668,
            "src": "5092:543:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 24666,
              "nodeType": "Block",
              "src": "5887:169:81",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 24650,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 24648,
                      "name": "startTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24641,
                      "src": "5901:14:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 24649,
                      "name": "endTimestamp",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24643,
                      "src": "5918:12:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5901:29:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24653,
                  "nodeType": "IfStatement",
                  "src": "5897:47:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 24651,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5939:5:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "functionReturnParameters": 24647,
                    "id": 24652,
                    "nodeType": "Return",
                    "src": "5932:12:81"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 24660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24654,
                        "name": "startTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24641,
                        "src": "5958:14:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 24655,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24639,
                        "src": "5976:9:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5958:27:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 24659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 24657,
                        "name": "timestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24639,
                        "src": "5989:9:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 24658,
                        "name": "endTimestamp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24643,
                        "src": "6002:12:81",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5989:25:81",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5958:56:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 24663,
                  "nodeType": "IfStatement",
                  "src": "5954:73:81",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 24661,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6023:4:81",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "functionReturnParameters": 24647,
                    "id": 24662,
                    "nodeType": "Return",
                    "src": "6016:11:81"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 24664,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6044:5:81",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 24647,
                  "id": 24665,
                  "nodeType": "Return",
                  "src": "6037:12:81"
                }
              ]
            },
            "documentation": null,
            "id": 24667,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isInSegment",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 24644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24639,
                  "mutability": "mutable",
                  "name": "timestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5744:17:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24638,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5744:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24641,
                  "mutability": "mutable",
                  "name": "startTimestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5771:22:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24640,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5771:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 24643,
                  "mutability": "mutable",
                  "name": "endTimestamp",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5803:20:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 24642,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5803:7:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5734:95:81"
            },
            "returnParameters": {
              "id": 24647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 24646,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 24667,
                  "src": "5877:4:81",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 24645,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5877:4:81",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5876:6:81"
            },
            "scope": 24668,
            "src": "5714:342:81",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 24669,
        "src": "397:5661:81"
      }
    ],
    "src": "41:6018:81"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.289Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "details": "The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof",
        "params": {
          "cycle": "the cycle struct",
          "eomc": "the end of month convention to adjust",
          "startTime": "timestamp of the cycle start"
        },
        "returns": {
          "_0": "the adjusted end of month convention"
        }
      }
    },
    "title": "Schedule",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "notice": "This function makes an adjustment on the end of month convention."
      }
    },
    "notice": "Methods related to generating event schedules.",
    "version": 1
  }
}