{
  "contractName": "CappedSTOFactory",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "monthlySubscriptionCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSubscriptionCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySubscriptionFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newSetupCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactorySetupFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "setupCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newUsageCost",
          "type": "uint256"
        }
      ],
      "name": "changeFactoryUsageFee",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "usageCost",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_polyAddress",
          "type": "address"
        },
        {
          "name": "_setupCost",
          "type": "uint256"
        },
        {
          "name": "_usageCost",
          "type": "uint256"
        },
        {
          "name": "_subscriptionCost",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSetupcost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newSetupCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySetupFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newUsageCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactoryUsageFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldSubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newMonthlySubscriptionCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        }
      ],
      "name": "LogChangeFactorySubscriptionFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_moduleName",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_creator",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogGenerateModuleFromFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getType",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDescription",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTitle",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInstructions",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTags",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051608080612a9f833981016040908152815160208301519183015160609093015160008054600160a060020a0319908116331790915560018054600160a060020a039094169390911692909217909155600291909155600391909155600455612a1e806100816000396000f3006080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f1461017e575b600080fd5b3480156100e757600080fd5b506100fb6004803560248101910135610356565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c610756565b60408051918252519081900360200190f35b34801561014a57600080fd5b5061015361075c565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610761565b34801561018a57600080fd5b50610193610785565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107bc565b005b34801561022e57600080fd5b50610220600435610819565b34801561024657600080fd5b506100fb610876565b34801561025b57600080fd5b50610220610885565b34801561027057600080fd5b5061012c6108f1565b34801561028557600080fd5b506100fb6108f7565b34801561029a57600080fd5b506102a3610906565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b50610220600435610a1c565b34801561031757600080fd5b5061012c610a79565b34801561032c57600080fd5b50610193610a7f565b34801561034157600080fd5b50610220600160a060020a0360043516610aa3565b600080600060025411156104c85760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b505115156104c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104de610bc4565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610511573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d602081101561057c57600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105d791879087908190840183828082843750610ac6945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af191505015156106ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b30610708610761565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f43617070656453544f000000000000000000000000000000000000000000000090565b60408051808201909152600a81527f4361707065642053544f00000000000000000000000000000000000000000000602082015290565b600054600160a060020a031633146107d357600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461083057600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461089c57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600480825260a08201909252606091829190602082016080803883390190505090507f436170706564000000000000000000000000000000000000000000000000000081600081518110151561095c57fe5b6020908102909101015280517f4e6f6e2d726566756e6461626c65000000000000000000000000000000000000908290600190811061099757fe5b6020908102909101015280517f504f4c590000000000000000000000000000000000000000000000000000000090829060029081106109d257fe5b6020908102909101015280517f45544800000000000000000000000000000000000000000000000000000000009082906003908110610a0d57fe5b60209081029091010152905090565b600054600160a060020a03163314610a3357600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101606040519081016040528061013281526020016128c16101329139905090565b600054600160a060020a03163314610aba57600080fd5b610ac381610b47565b50565b60008060006004845110610adb576004610ade565b83515b9150600090505b81811015610b405780600183030360080260020a8482815181101515610b0757fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610ae5565b5050919050565b600160a060020a0381161515610b5c57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051611cec80610bd583390190560060806040526002805460a060020a60ff02191690556007805460ff1916905534801561002a57600080fd5b50604051604080611cec83398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611c618061008b6000396000f30060806040526004361061017c5763ffffffff60e060020a6000350416631040dc2781146101875780631613ec9d146101df5780632c4e722e146102295780633197cbb614610250578063355274ea1461026557806335ff3a511461027a57806338c59de91461028f5780633f4ba83a146102a45780634f935945146102b9578063518ab2a8146102e2578063521eb273146102f75780635c975abb146103285780635f7619a41461033d5780636681b9fd146103555780636f7bc9be1461036a5780636faa22a51461038b57806378e97925146103a05780638456cb59146103b55780638905fd4f146103ca5780639f5a851f146103eb578063a3fb8f151461041e578063a412f87c14610433578063b2cca39d14610457578063b84dfbd21461046c578063c3a07df614610481578063c45a0155146104e6578063cb752679146104fb578063d70afa9614610513578063d7e64c0014610528578063ec8ac4d81461053d578063eda524bc14610551578063ee7c0db01461056c575b61018533610581565b005b34801561019357600080fd5b5061019c61068d565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c0840152151560e083015251908190036101000190f35b3480156101eb57600080fd5b506101f46106f3565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561023557600080fd5b5061023e61074f565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e610755565b34801561027157600080fd5b5061023e61075b565b34801561028657600080fd5b5061023e610761565b34801561029b57600080fd5b5061023e610795565b3480156102b057600080fd5b5061018561079b565b3480156102c557600080fd5b506102ce610883565b604080519115158252519081900360200190f35b3480156102ee57600080fd5b5061023e61088e565b34801561030357600080fd5b5061030c610894565b60408051600160a060020a039092168252519081900360200190f35b34801561033457600080fd5b506102ce6108a8565b34801561034957600080fd5b506102ce6004356108b8565b34801561036157600080fd5b5061023e610bf7565b34801561037657600080fd5b5061023e600160a060020a0360043516610bfd565b34801561039757600080fd5b5061030c610c0f565b3480156103ac57600080fd5b5061023e610c1e565b3480156103c157600080fd5b50610185610c24565b3480156103d657600080fd5b50610185600160a060020a0360043516610d18565b3480156103f757600080fd5b5061018560043560243560443560643560ff60843516600160a060020a0360a43516610f46565b34801561042a57600080fd5b5061023e611195565b34801561043f57600080fd5b506102ce600160a060020a03600435166024356111a1565b34801561046357600080fd5b5061023e611247565b34801561047857600080fd5b5061030c61124d565b34801561048d57600080fd5b5061049661125c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d25781810151838201526020016104ba565b505050509050019250505060405180910390f35b3480156104f257600080fd5b5061030c61126e565b34801561050757600080fd5b5061018560043561127d565b34801561051f57600080fd5b5061023e6113fa565b34801561053457600080fd5b5061023e61141e565b610185600160a060020a0360043516610581565b34801561055d57600080fd5b506102ce60ff60043516611424565b34801561057857600080fd5b5061023e611439565b60075460009060ff161561059457600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156105b857600080fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610661576040805160e560020a62461bcd028152602060048201526024808201527f4554482073686f756c6420626520746865206d6f6465206f6620696e7665737460448201527f6d656e7400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b503461066d828261143f565b6106756114df565b61067f8282611522565b50506007805460ff19169055565b600080600080600080600080600454600554600c54600854600954600a54600b54600360006001808111156106be57fe5b60ff9081168252602082019290925260400160002054979f50959d50939b509199509750955093501690509091929394959697565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f362c75696e743235362c75696e74382c61646472657373290000000000000000602082015290519081900360380190205b90565b60085481565b60055481565b600c5481565b6000600381805b60ff9081168252602082019290925260400160002054161561078d575060095461074c565b50600061074c565b600a5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107ee57600080fd5b505af1158015610802573d6000803e3d6000fd5b505050506040513d602081101561081857600080fd5b5051600160a060020a03163314610879576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610881611526565b565b600c54600b54101590565b600b5481565b6007546101009004600160a060020a031681565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b505160005433600160a060020a03928316811494509116149050818061097e5750805b80610a245750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b50515b1515610a7a576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610ae957600080fd5b505af1158015610afd573d6000803e3d6000fd5b505050506040513d6020811015610b1357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050506040513d6020811015610b9457600080fd5b50511515610bec576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60095481565b600d6020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b5051600160a060020a03163314610d02576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610d1057600080fd5b6108816115dc565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b5051600160a060020a03163314610df9576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383161515610e0e57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b50511515610f4157600080fd5b505050565b600054600160a060020a03163314610fa8576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b60008311611026576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515611086576040805160e560020a62461bcd02815260206004820152601d60248201527f5a65726f2061646472657373206973206e6f74207065726d6974746564000000604482015290519081900360640190fd5b42861015801561109557508585115b15156110eb576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b60008411611143576040805160e560020a62461bcd02815260206004820152601c60248201527f4361702073686f756c642062652067726561746572207468616e203000000000604482015290519081900360640190fd5b60048690556005859055600c84905560088390556007805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a0384160217905561118d82611697565b505050505050565b60006003816001610768565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561121057600080fd5b505af1158015611224573d6000803e3d6000fd5b505050506040513d602081101561123a57600080fd5b5051101590505b92915050565b60065481565b600154600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031681565b60075460ff161561128d57600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156112b157600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff16151561135c576040805160e560020a62461bcd02815260206004820152602560248201527f504f4c592073686f756c6420626520746865206d6f6465206f6620696e76657360448201527f746d656e74000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61136633826111a1565b15156113bc576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f742076616c696420496e766573746d656e74000000000000000000000000604482015290519081900360640190fd5b6113c6338261143f565b6007546113e39033906101009004600160a060020a0316836117ae565b6113ed3382611522565b506007805460ff19169055565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600a5481565b60036020526000908152604090205460ff1681565b600b5490565b600061144b8383611856565b61145482611a82565b60095490915061146a908363ffffffff611a9916565b600955600b54611480908263ffffffff611a9916565b600b5561148d8382611aa6565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3610f418383611522565b600754604051600160a060020a0361010090920491909116903480156108fc02916000818181858888f1935050505015801561151f573d6000803e3d6000fd5b50565b5050565b60025460a060020a900460ff161515611589576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025460a060020a900460ff161561163e576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b60ff811615806116aa57508060ff166001145b1515611700576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420612076616c69642066756e6472616973652074797065000000000000604482015290519081900360640190fd5b60ff81166000818152600360205260409020805460ff19166001908117909155141561151f57600254600160a060020a0316151561151f576040805160e560020a62461bcd02815260206004820152602960248201527f41646472657373206f662074686520706f6c79546f6b656e2073686f756c642060448201527f6e6f742062652030780000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152858116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b5050505050565b600160a060020a03821615156118db576040805160e560020a62461bcd028152602060048201526024808201527f42656e656669636961727920616464726573732073686f756c64206e6f74206260448201527f6520307800000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b801515611958576040805160e560020a62461bcd02815260206004820152602860248201527f416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657160448201527f75616c20746f2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c5461197661196783611a82565b600b549063ffffffff611a9916565b11156119f2576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746d656e74206d6f7265207468616e20636170206973206e6f742060448201527f616c6c6f77656400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004544210158015611a0657506005544211155b1515611522576040805160e560020a62461bcd02815260206004820152602260248201527f4f66666572696e6720697320636c6f7365642f4e6f742079657420737461727460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600061124160085483611b1b90919063ffffffff16565b8181018281101561124157fe5b600160a060020a0382166000908152600d60205260409020541515611acf57600a805460010190555b600160a060020a0382166000908152600d6020526040902054611af8908263ffffffff611a9916565b600160a060020a0383166000908152600d60205260409020556115228282611b44565b6000821515611b2c57506000611241565b50818102818382811515611b3c57fe5b041461124157fe5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b50511515611522576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd00a165627a7a72305820ff67e759834d664815c2ce3dca2711e15ca212ac58ec4f5c21e798151be297870029496e697469616c697365732061206361707065642053544f2e20496e697420706172616d657465727320617265205f737461727454696d65202874696d652053544f20737461727473292c205f656e6454696d65202874696d652053544f20656e6473292c205f636170202863617020696e20746f6b656e7320666f722053544f292c205f726174652028504f4c592f45544820746f20746f6b656e2072617465292c205f66756e6452616973655479706520287768657468657220796f75206172652072616973696e6720696e20504f4c59206f7220455448292c205f706f6c79546f6b656e202861646472657373206f6620504f4c5920746f6b656e292c205f66756e647352656365697665722028616464726573732077686963682077696c6c20726563656976652066756e647329a165627a7a723058201930242956c91029199b080355cb9cb04db7808e7226f5e17734ca7d04186bcb0029",
  "deployedBytecode": "0x6080604052600436106100d65763ffffffff60e060020a60003504166277436081146100db57806306184a251461011757806315dae03e1461013e57806317d7de7c146101695780631a0925411461017e5780633ae192bd1461020857806358a191c3146102225780636faa22a51461023a578063715018a61461024f5780637e363ffa146102645780638da5cb5b14610279578063995d9ab71461028e578063aac67b05146102f3578063d54c47261461030b578063e0d5497014610320578063f2fde38b14610335578063ff3c1a8f1461017e575b600080fd5b3480156100e757600080fd5b506100fb6004803560248101910135610356565b60408051600160a060020a039092168252519081900360200190f35b34801561012357600080fd5b5061012c610756565b60408051918252519081900360200190f35b34801561014a57600080fd5b5061015361075c565b6040805160ff9092168252519081900360200190f35b34801561017557600080fd5b5061012c610761565b34801561018a57600080fd5b50610193610785565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101cd5781810151838201526020016101b5565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561021457600080fd5b506102206004356107bc565b005b34801561022e57600080fd5b50610220600435610819565b34801561024657600080fd5b506100fb610876565b34801561025b57600080fd5b50610220610885565b34801561027057600080fd5b5061012c6108f1565b34801561028557600080fd5b506100fb6108f7565b34801561029a57600080fd5b506102a3610906565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102df5781810151838201526020016102c7565b505050509050019250505060405180910390f35b3480156102ff57600080fd5b50610220600435610a1c565b34801561031757600080fd5b5061012c610a79565b34801561032c57600080fd5b50610193610a7f565b34801561034157600080fd5b50610220600160a060020a0360043516610aa3565b600080600060025411156104c85760015460008054600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909316926323b872dd9260648083019360209390929083900390910190829087803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b505050506040513d602081101561040d57600080fd5b505115156104c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f4661696c6564207472616e7366657246726f6d2062656361757365206f66207360448201527f7566666963656e7420416c6c6f77616e6365206973206e6f742070726f76696460648201527f6564000000000000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6001543390600160a060020a03166104de610bc4565b600160a060020a03928316815291166020820152604080519182900301906000f080158015610511573d6000803e3d6000fd5b50905080600160a060020a0316631613ec9d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561055257600080fd5b505af1158015610566573d6000803e3d6000fd5b505050506040513d602081101561057c57600080fd5b5051604080516020601f87018190048102820181019092528581527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909216916105d791879087908190840183828082843750610ac6945050505050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461066257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f76696465642064617461206973206e6f742076616c6964000000000000604482015290519081900360640190fd5b80600160a060020a03168484604051808383808284378201915050925050506000604051808303816000865af191505015156106ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f556e2d7375636365737366756c6c2063616c6c00000000000000000000000000604482015290519081900360640190fd5b30610708610761565b60408051600160a060020a0385168152336020820152428183015290517f1b81ebef84f1d2411caa47894fb587822eff7c2a8a3580a2d52ce516f840c8219181900360600190a39392505050565b60045481565b600390565b7f43617070656453544f000000000000000000000000000000000000000000000090565b60408051808201909152600a81527f4361707065642053544f00000000000000000000000000000000000000000000602082015290565b600054600160a060020a031633146107d357600080fd5b60045460408051918252602082018390523082820152517fc15ef5ae01a170635c048bc2ddb0e834fe5d866424709f0a7398496a80852ec89181900360600190a1600455565b600054600160a060020a0316331461083057600080fd5b60025460408051918252602082018390523082820152517ff9c53ed8f7f318ac63991d13acab4cf653984ce56b7dc1b3a2083af3f412262d9181900360600190a1600255565b600154600160a060020a031681565b600054600160a060020a0316331461089c57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60025481565b600054600160a060020a031681565b60408051600480825260a08201909252606091829190602082016080803883390190505090507f436170706564000000000000000000000000000000000000000000000000000081600081518110151561095c57fe5b6020908102909101015280517f4e6f6e2d726566756e6461626c65000000000000000000000000000000000000908290600190811061099757fe5b6020908102909101015280517f504f4c590000000000000000000000000000000000000000000000000000000090829060029081106109d257fe5b6020908102909101015280517f45544800000000000000000000000000000000000000000000000000000000009082906003908110610a0d57fe5b60209081029091010152905090565b600054600160a060020a03163314610a3357600080fd5b60035460408051918252602082018390523082820152517fff5bf6a8d25c4e30ad5778be1e2a41c7c45173313279bcbba6e2bb1b1bf7a6db9181900360600190a1600355565b60035481565b60606101606040519081016040528061013281526020016128c16101329139905090565b600054600160a060020a03163314610aba57600080fd5b610ac381610b47565b50565b60008060006004845110610adb576004610ade565b83515b9150600090505b81811015610b405780600183030360080260020a8482815181101515610b0757fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050610ae5565b5050919050565b600160a060020a0381161515610b5c57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604051611cec80610bd583390190560060806040526002805460a060020a60ff02191690556007805460ff1916905534801561002a57600080fd5b50604051604080611cec83398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611c618061008b6000396000f30060806040526004361061017c5763ffffffff60e060020a6000350416631040dc2781146101875780631613ec9d146101df5780632c4e722e146102295780633197cbb614610250578063355274ea1461026557806335ff3a511461027a57806338c59de91461028f5780633f4ba83a146102a45780634f935945146102b9578063518ab2a8146102e2578063521eb273146102f75780635c975abb146103285780635f7619a41461033d5780636681b9fd146103555780636f7bc9be1461036a5780636faa22a51461038b57806378e97925146103a05780638456cb59146103b55780638905fd4f146103ca5780639f5a851f146103eb578063a3fb8f151461041e578063a412f87c14610433578063b2cca39d14610457578063b84dfbd21461046c578063c3a07df614610481578063c45a0155146104e6578063cb752679146104fb578063d70afa9614610513578063d7e64c0014610528578063ec8ac4d81461053d578063eda524bc14610551578063ee7c0db01461056c575b61018533610581565b005b34801561019357600080fd5b5061019c61068d565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c0840152151560e083015251908190036101000190f35b3480156101eb57600080fd5b506101f46106f3565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561023557600080fd5b5061023e61074f565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e610755565b34801561027157600080fd5b5061023e61075b565b34801561028657600080fd5b5061023e610761565b34801561029b57600080fd5b5061023e610795565b3480156102b057600080fd5b5061018561079b565b3480156102c557600080fd5b506102ce610883565b604080519115158252519081900360200190f35b3480156102ee57600080fd5b5061023e61088e565b34801561030357600080fd5b5061030c610894565b60408051600160a060020a039092168252519081900360200190f35b34801561033457600080fd5b506102ce6108a8565b34801561034957600080fd5b506102ce6004356108b8565b34801561036157600080fd5b5061023e610bf7565b34801561037657600080fd5b5061023e600160a060020a0360043516610bfd565b34801561039757600080fd5b5061030c610c0f565b3480156103ac57600080fd5b5061023e610c1e565b3480156103c157600080fd5b50610185610c24565b3480156103d657600080fd5b50610185600160a060020a0360043516610d18565b3480156103f757600080fd5b5061018560043560243560443560643560ff60843516600160a060020a0360a43516610f46565b34801561042a57600080fd5b5061023e611195565b34801561043f57600080fd5b506102ce600160a060020a03600435166024356111a1565b34801561046357600080fd5b5061023e611247565b34801561047857600080fd5b5061030c61124d565b34801561048d57600080fd5b5061049661125c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d25781810151838201526020016104ba565b505050509050019250505060405180910390f35b3480156104f257600080fd5b5061030c61126e565b34801561050757600080fd5b5061018560043561127d565b34801561051f57600080fd5b5061023e6113fa565b34801561053457600080fd5b5061023e61141e565b610185600160a060020a0360043516610581565b34801561055d57600080fd5b506102ce60ff60043516611424565b34801561057857600080fd5b5061023e611439565b60075460009060ff161561059457600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156105b857600080fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610661576040805160e560020a62461bcd028152602060048201526024808201527f4554482073686f756c6420626520746865206d6f6465206f6620696e7665737460448201527f6d656e7400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b503461066d828261143f565b6106756114df565b61067f8282611522565b50506007805460ff19169055565b600080600080600080600080600454600554600c54600854600954600a54600b54600360006001808111156106be57fe5b60ff9081168252602082019290925260400160002054979f50959d50939b509199509750955093501690509091929394959697565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f362c75696e743235362c75696e74382c61646472657373290000000000000000602082015290519081900360380190205b90565b60085481565b60055481565b600c5481565b6000600381805b60ff9081168252602082019290925260400160002054161561078d575060095461074c565b50600061074c565b600a5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107ee57600080fd5b505af1158015610802573d6000803e3d6000fd5b505050506040513d602081101561081857600080fd5b5051600160a060020a03163314610879576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610881611526565b565b600c54600b54101590565b600b5481565b6007546101009004600160a060020a031681565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b505160005433600160a060020a03928316811494509116149050818061097e5750805b80610a245750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b50515b1515610a7a576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610ae957600080fd5b505af1158015610afd573d6000803e3d6000fd5b505050506040513d6020811015610b1357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050506040513d6020811015610b9457600080fd5b50511515610bec576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60095481565b600d6020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b5051600160a060020a03163314610d02576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610d1057600080fd5b6108816115dc565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b5051600160a060020a03163314610df9576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383161515610e0e57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b50511515610f4157600080fd5b505050565b600054600160a060020a03163314610fa8576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b60008311611026576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515611086576040805160e560020a62461bcd02815260206004820152601d60248201527f5a65726f2061646472657373206973206e6f74207065726d6974746564000000604482015290519081900360640190fd5b42861015801561109557508585115b15156110eb576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b60008411611143576040805160e560020a62461bcd02815260206004820152601c60248201527f4361702073686f756c642062652067726561746572207468616e203000000000604482015290519081900360640190fd5b60048690556005859055600c84905560088390556007805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a0384160217905561118d82611697565b505050505050565b60006003816001610768565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561121057600080fd5b505af1158015611224573d6000803e3d6000fd5b505050506040513d602081101561123a57600080fd5b5051101590505b92915050565b60065481565b600154600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031681565b60075460ff161561128d57600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156112b157600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff16151561135c576040805160e560020a62461bcd02815260206004820152602560248201527f504f4c592073686f756c6420626520746865206d6f6465206f6620696e76657360448201527f746d656e74000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61136633826111a1565b15156113bc576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f742076616c696420496e766573746d656e74000000000000000000000000604482015290519081900360640190fd5b6113c6338261143f565b6007546113e39033906101009004600160a060020a0316836117ae565b6113ed3382611522565b506007805460ff19169055565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600a5481565b60036020526000908152604090205460ff1681565b600b5490565b600061144b8383611856565b61145482611a82565b60095490915061146a908363ffffffff611a9916565b600955600b54611480908263ffffffff611a9916565b600b5561148d8382611aa6565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3610f418383611522565b600754604051600160a060020a0361010090920491909116903480156108fc02916000818181858888f1935050505015801561151f573d6000803e3d6000fd5b50565b5050565b60025460a060020a900460ff161515611589576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025460a060020a900460ff161561163e576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b60ff811615806116aa57508060ff166001145b1515611700576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420612076616c69642066756e6472616973652074797065000000000000604482015290519081900360640190fd5b60ff81166000818152600360205260409020805460ff19166001908117909155141561151f57600254600160a060020a0316151561151f576040805160e560020a62461bcd02815260206004820152602960248201527f41646472657373206f662074686520706f6c79546f6b656e2073686f756c642060448201527f6e6f742062652030780000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152858116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b5050505050565b600160a060020a03821615156118db576040805160e560020a62461bcd028152602060048201526024808201527f42656e656669636961727920616464726573732073686f756c64206e6f74206260448201527f6520307800000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b801515611958576040805160e560020a62461bcd02815260206004820152602860248201527f416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657160448201527f75616c20746f2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c5461197661196783611a82565b600b549063ffffffff611a9916565b11156119f2576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746d656e74206d6f7265207468616e20636170206973206e6f742060448201527f616c6c6f77656400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004544210158015611a0657506005544211155b1515611522576040805160e560020a62461bcd02815260206004820152602260248201527f4f66666572696e6720697320636c6f7365642f4e6f742079657420737461727460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600061124160085483611b1b90919063ffffffff16565b8181018281101561124157fe5b600160a060020a0382166000908152600d60205260409020541515611acf57600a805460010190555b600160a060020a0382166000908152600d6020526040902054611af8908263ffffffff611a9916565b600160a060020a0383166000908152600d60205260409020556115228282611b44565b6000821515611b2c57506000611241565b50818102818382811515611b3c57fe5b041461124157fe5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b50511515611522576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd00a165627a7a72305820ff67e759834d664815c2ce3dca2711e15ca212ac58ec4f5c21e798151be297870029496e697469616c697365732061206361707065642053544f2e20496e697420706172616d657465727320617265205f737461727454696d65202874696d652053544f20737461727473292c205f656e6454696d65202874696d652053544f20656e6473292c205f636170202863617020696e20746f6b656e7320666f722053544f292c205f726174652028504f4c592f45544820746f20746f6b656e2072617465292c205f66756e6452616973655479706520287768657468657220796f75206172652072616973696e6720696e20504f4c59206f7220455448292c205f706f6c79546f6b656e202861646472657373206f6620504f4c5920746f6b656e292c205f66756e647352656365697665722028616464726573732077686963682077696c6c20726563656976652066756e647329a165627a7a723058201930242956c91029199b080355cb9cb04db7808e7226f5e17734ca7d04186bcb0029",
  "sourceMap": "195:2690:38:-;;;341:199;8:9:-1;5:2;;;30:1;27;20:12;5:2;341:199:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;;;575:10;567:18;;;;;1123:31:14;;-1:-1:-1;;;;;1123:31:14;;;;;;;;;;;;;;1162:9;:22;;;;1192:9;:22;;;;1222:23;:43;195:2690:38;;;;;;",
  "deployedSourceMap": "195:2690:38:-;;;;;;;;;-1:-1:-1;;;195:2690:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;683:754;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;683:754:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;683:754:38;;;;;;;;;;;;;;363:38:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;363:38:14;;;;;;;;;;;;;;;;;;;;1501:71:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1501:71:38;;;;;;;;;;;;;;;;;;;;;;;1636:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1636:83:38;;;;1790:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1790:90:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1790:90:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3197:265:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3197:265:14;;;;;;;2548:193;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2548:193:14;;;;;275:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;275:22:14;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;303:24:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:24:14;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;2585:297:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2585:297:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2585:297:38;;;;;;;;;;;;;;;;;2862:193:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2862:193:14;;;;;333:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:24:14;;;;2118:387:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2118:387:38;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;683:754:38;729:7;984:19;763:1;751:9;;:13;748:161;;;786:9;;;821:5;;828:9;;786:52;;;;;;809:10;786:52;;;;-1:-1:-1;;;;;821:5:38;;;786:52;;;;;;;;;;;;:9;;;;;:22;;:52;;;;;;;;;;;;;;;;;;;:9;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;786:52:38;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;786:52:38;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;786:52:38;778:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1040:9;;1020:10;;-1:-1:-1;;;;;1040:9:38;1006:45;;:::i;:::-;-1:-1:-1;;;;;1006:45:38;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1006:45:38;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1006:45:38;984:67;;1159:9;-1:-1:-1;;;;;1159:25:38;;:27;;;;;-1:-1:-1;;;1159:27:38;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1159:27:38;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1159:27:38;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1159:27:38;1142:13;;;1159:27;1142:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;1142:44:38;;;;:13;;1149:5;;;;;;1142:13;;1149:5;;;;1142:13;;-1:-1:-1;1142:6:38;;-1:-1:-1;;;;;1142:13:38:i;:::-;-1:-1:-1;;1142:44:38;;1134:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:9;-1:-1:-1;;;;;1235:23:38;1259:5;;1235:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1227:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:4;1353:9;:7;:9::i;:::-;1304:91;;;-1:-1:-1;;;;;1304:91:38;;;;1379:10;1304:91;;;;1391:3;1304:91;;;;;;;;;;;;;;;1420:9;683:754;-1:-1:-1;;;683:754:38:o;363:38:14:-;;;;:::o;1501:71:38:-;1564:1;1501:71;:::o;1636:83::-;1694:18;1636:83;:::o;1790:90::-;1854:19;;;;;;;;;;;;;;;;;1790:90;:::o;3197:265:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;3329:23:14;;3297:93;;;;;;;;;;;;3384:4;3297:93;;;;;;;;;;;;;;3400:23;:46;3197:265::o;2548:193::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2659:9:14;;2634:65;;;;;;;;;;;;2693:4;2634:65;;;;;;;;;;;;;;2709:9;:25;2548:193::o;275:22::-;;;-1:-1:-1;;;;;275:22:14;;:::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;;931:1;915:18;;-1:-1:-1;;915:18:64;;;827:111::o;303:24:14:-;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;2585:297:38:-;2678:16;;;2692:1;2678:16;;;;;;;;;2624:9;;;;2678:16;;;;17:15:-1;;105:10;2678:16:38;88:34:-1;136:17;;-1:-1;2678:16:38;2645:49;;2704:27;:13;2718:1;2704:16;;;;;;;;;;;;;;;;;;:27;2741:16;;:35;;:13;;2755:1;;2741:16;;;;;;;;;;;;;;:35;2786:16;;:25;;:13;;2800:1;;2786:16;;;;;;;;;;;;;;:25;2821:16;;:24;;:13;;2835:1;;2821:16;;;;;;;;;;;;;;:24;2862:13;-1:-1:-1;2585:297:38;:::o;2862:193:14:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;2973:9:14;;2948:65;;;;;;;;;;;;3007:4;2948:65;;;;;;;;;;;;;;3023:9;:25;2862:193::o;333:24::-;;;;:::o;2118:387:38:-;2165:6;2183:315;;;;;;;;;;;;;;;;;;;;2118:387;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;2166:261:14:-;2218:10;2240:8;2301:6;2266:1;2251:5;:12;:16;:35;;2285:1;2251:35;;;2270:5;:12;2251:35;2240:46;;2310:1;2301:10;;2296:125;2317:3;2313:1;:7;2296:125;;;2405:1;2401;2395:3;:7;:11;2390:1;:17;2384:1;:24;2371:5;2377:1;2371:8;;;;;;;;;;;;;;;-1:-1:-1;;;2371:8:14;;-1:-1:-1;;;2371:8:14;-1:-1:-1;;;2366:14:14;;:43;2359:3;-1:-1:-1;;;2354:9:14;;:55;-1:-1:-1;;;2347:63:14;2341:69;;2322:3;;;;;;;2296:125;;;2166:261;;;;;:::o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;;1443:38;;;1487:5;:17;;-1:-1:-1;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;195:2690:38:-;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./CappedSTO.sol\";\nimport \"../../interfaces/IModuleFactory.sol\";\nimport \"../../interfaces/IModule.sol\";\n\n/**\n * @title Factory for deploying CappedSTO module\n */\ncontract CappedSTOFactory is IModuleFactory {\n\n    /**\n     * @notice Constructor\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public\n      IModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost)\n    {\n\n    }\n\n     /**\n     * @notice used to launch the Module with the help of factory\n     * @return address Contract address of the Module\n     */\n    function deploy(bytes _data) external returns(address) {\n        if(setupCost > 0)\n            require(polyToken.transferFrom(msg.sender, owner, setupCost), \"Failed transferFrom because of sufficent Allowance is not provided\");\n        //Check valid bytes - can only call module init function\n        CappedSTO cappedSTO = new CappedSTO(msg.sender, address(polyToken));\n        //Checks that _data is valid (not calling anything it shouldn't)\n        require(getSig(_data) == cappedSTO.getInitFunction(), \"Provided data is not valid\");\n        require(address(cappedSTO).call(_data), \"Un-successfull call\");\n        emit LogGenerateModuleFromFactory(address(cappedSTO), getName(), address(this), msg.sender, now);\n        return address(cappedSTO);\n    }\n\n    /**\n     * @notice Type of the Module factory\n     */\n    function getType() public view returns(uint8) {\n        return 3;\n    }\n\n    /**\n     * @notice Get the name of the Module\n     */\n    function getName() public view returns(bytes32) {\n        return \"CappedSTO\";\n    }\n\n    /**\n     * @notice Get the description of the Module\n     */\n    function getDescription() public view returns(string) {\n        return \"Capped STO\";\n    }\n\n    /**\n     * @notice Get the title of the Module\n     */\n    function getTitle() public view returns(string) {\n        return \"Capped STO\";\n    }\n\n    /**\n     * @notice Get the Instructions that helped to used the module\n     */\n    function getInstructions() public view returns(string) {\n        return \"Initialises a capped STO. Init parameters are _startTime (time STO starts), _endTime (time STO ends), _cap (cap in tokens for STO), _rate (POLY/ETH to token rate), _fundRaiseType (whether you are raising in POLY or ETH), _polyToken (address of POLY token), _fundsReceiver (address which will receive funds)\";\n    }\n\n    /**\n     * @notice Get the tags related to the module factory\n     */\n    function getTags() public view returns(bytes32[]) {\n        bytes32[] memory availableTags = new bytes32[](4);\n        availableTags[0] = \"Capped\";\n        availableTags[1] = \"Non-refundable\";\n        availableTags[2] = \"POLY\";\n        availableTags[3] = \"ETH\";\n        return availableTags;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTOFactory.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTOFactory.sol",
    "exportedSymbols": {
      "CappedSTOFactory": [
        14116
      ]
    },
    "id": 14117,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13936,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:38"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTO.sol",
        "file": "./CappedSTO.sol",
        "id": 13937,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 13935,
        "src": "26:25:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 13938,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 9955,
        "src": "52:45:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 13939,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 9718,
        "src": "98:38:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13940,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "224:14:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 13941,
            "nodeType": "InheritanceSpecifier",
            "src": "224:14:38"
          }
        ],
        "contractDependencies": [
          9954,
          13934,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying CappedSTO module",
        "fullyImplemented": true,
        "id": 14116,
        "linearizedBaseContracts": [
          14116,
          9954,
          22664
        ],
        "name": "CappedSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 13958,
              "nodeType": "Block",
              "src": "532:8:38",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 13959,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13952,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13943,
                    "src": "471:12:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13953,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13945,
                    "src": "485:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13954,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13947,
                    "src": "497:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13955,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13949,
                    "src": "509:17:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 13956,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13951,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "456:14:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "456:71:38"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13943,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "354:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13945,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "376:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13944,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13947,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "396:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13949,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "416:25:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "353:89:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 13957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "532:0:38"
            },
            "scope": 14116,
            "src": "341:199:38",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14031,
              "nodeType": "Block",
              "src": "738:699:38",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13966,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "751:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "763:1:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "751:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13980,
                  "nodeType": "IfStatement",
                  "src": "748:161:38",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13972,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "809:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 13973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "809:10:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13974,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "821:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13975,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "828:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13970,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "786:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 13971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "786:22:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 13976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "786:52:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 13977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "840:68:38",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 13969,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "778:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 13978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "778:131:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13979,
                    "nodeType": "ExpressionStatement",
                    "src": "778:131:38"
                  }
                },
                {
                  "assignments": [
                    13982
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13982,
                      "name": "cappedSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 14032,
                      "src": "984:19:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CappedSTO_$13934",
                        "typeString": "contract CappedSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13981,
                        "name": "CappedSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13934,
                        "src": "984:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13991,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13985,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1020:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1020:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13988,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1040:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 13987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1032:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1032:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13984,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1006:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_CappedSTO_$13934_$",
                        "typeString": "function (address,address) returns (contract CappedSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13983,
                        "name": "CappedSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13934,
                        "src": "1010:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      }
                    },
                    "id": 13990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1006:45:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CappedSTO_$13934",
                      "typeString": "contract CappedSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "984:67:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13994,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13961,
                              "src": "1149:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 13993,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1142:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 13995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1142:13:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13996,
                              "name": "cappedSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13982,
                              "src": "1159:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                "typeString": "contract CappedSTO"
                              }
                            },
                            "id": 13997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13472,
                            "src": "1159:25:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 13998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1159:27:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1142:44:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 14000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1188:28:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 13992,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1134:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:83:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14002,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:83:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14008,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13961,
                            "src": "1259:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14005,
                                "name": "cappedSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13982,
                                "src": "1243:9:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                  "typeString": "contract CappedSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                  "typeString": "contract CappedSTO"
                                }
                              ],
                              "id": 14004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1235:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 14006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1235:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 14007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1235:23:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 14009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1235:30:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 14010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1267:21:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 14003,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1227:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1227:62:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14012,
                  "nodeType": "ExpressionStatement",
                  "src": "1227:62:38"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14015,
                            "name": "cappedSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13982,
                            "src": "1341:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CappedSTO_$13934",
                              "typeString": "contract CappedSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CappedSTO_$13934",
                              "typeString": "contract CappedSTO"
                            }
                          ],
                          "id": 14014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1333:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1333:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 14017,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            14048
                          ],
                          "referencedDeclaration": 14048,
                          "src": "1353:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 14018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1353:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14020,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23274,
                            "src": "1372:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CappedSTOFactory_$14116",
                              "typeString": "contract CappedSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CappedSTOFactory_$14116",
                              "typeString": "contract CappedSTOFactory"
                            }
                          ],
                          "id": 14019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1364:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1364:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14022,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1379:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 14023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1379:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14024,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1391:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14013,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1304:28:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 14025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1304:91:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14026,
                  "nodeType": "EmitStatement",
                  "src": "1299:96:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14028,
                        "name": "cappedSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13982,
                        "src": "1420:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      ],
                      "id": 14027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1412:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 14029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1412:18:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13965,
                  "id": 14030,
                  "nodeType": "Return",
                  "src": "1405:25:38"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 14032,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13961,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 14032,
                  "src": "699:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13960,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "699:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "698:13:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 13965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13964,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14032,
                  "src": "729:7:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "729:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "728:9:38"
            },
            "scope": 14116,
            "src": "683:754:38",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14039,
              "nodeType": "Block",
              "src": "1547:25:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 14037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1564:1:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 14036,
                  "id": 14038,
                  "nodeType": "Return",
                  "src": "1557:8:38"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 14040,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14033,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1517:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14035,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14040,
                  "src": "1540:5:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14034,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1540:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1539:7:38"
            },
            "scope": 14116,
            "src": "1501:71:38",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14047,
              "nodeType": "Block",
              "src": "1684:35:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "43617070656453544f",
                    "id": 14045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1701:11:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d3dba09dff35150cdb7d1c6862d285600c72a3858c9e94fd82de42e61b9824ab",
                      "typeString": "literal_string \"CappedSTO\""
                    },
                    "value": "CappedSTO"
                  },
                  "functionReturnParameters": 14044,
                  "id": 14046,
                  "nodeType": "Return",
                  "src": "1694:18:38"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 14048,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14041,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1652:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14043,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14048,
                  "src": "1675:7:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1675:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1674:9:38"
            },
            "scope": 14116,
            "src": "1636:83:38",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14055,
              "nodeType": "Block",
              "src": "1844:36:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4361707065642053544f",
                    "id": 14053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1861:12:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1555df6d0021d8c67ee7169df47ccaf6f86c37dfa3743034b95ea61e6ed7b9f6",
                      "typeString": "literal_string \"Capped STO\""
                    },
                    "value": "Capped STO"
                  },
                  "functionReturnParameters": 14052,
                  "id": 14054,
                  "nodeType": "Return",
                  "src": "1854:19:38"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 14056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14049,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1813:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14051,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14056,
                  "src": "1836:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14050,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1836:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1835:8:38"
            },
            "scope": 14116,
            "src": "1790:90:38",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14063,
              "nodeType": "Block",
              "src": "1993:36:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4361707065642053544f",
                    "id": 14061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2010:12:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1555df6d0021d8c67ee7169df47ccaf6f86c37dfa3743034b95ea61e6ed7b9f6",
                      "typeString": "literal_string \"Capped STO\""
                    },
                    "value": "Capped STO"
                  },
                  "functionReturnParameters": 14060,
                  "id": 14062,
                  "nodeType": "Return",
                  "src": "2003:19:38"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 14064,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1962:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14059,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14064,
                  "src": "1985:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14058,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1985:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1984:8:38"
            },
            "scope": 14116,
            "src": "1945:84:38",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14071,
              "nodeType": "Block",
              "src": "2173:332:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "496e697469616c697365732061206361707065642053544f2e20496e697420706172616d657465727320617265205f737461727454696d65202874696d652053544f20737461727473292c205f656e6454696d65202874696d652053544f20656e6473292c205f636170202863617020696e20746f6b656e7320666f722053544f292c205f726174652028504f4c592f45544820746f20746f6b656e2072617465292c205f66756e6452616973655479706520287768657468657220796f75206172652072616973696e6720696e20504f4c59206f7220455448292c205f706f6c79546f6b656e202861646472657373206f6620504f4c5920746f6b656e292c205f66756e647352656365697665722028616464726573732077686963682077696c6c20726563656976652066756e647329",
                    "id": 14069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2190:308:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d9ef457c2755e64217ca9e90cc3d65779631365ac15b28ff9405184aa4dba3ae",
                      "typeString": "literal_string \"Initialises a capped STO. Init parameters are _startTime (time STO starts), _endTime (time STO ends), _cap (cap in tokens for STO), _rate (POLY/ETH to token rate), _fundRaiseType (whether you are raising in POLY or ETH), _polyToken (address of POLY token), _fundsReceiver (address which will receive funds)\""
                    },
                    "value": "Initialises a capped STO. Init parameters are _startTime (time STO starts), _endTime (time STO ends), _cap (cap in tokens for STO), _rate (POLY/ETH to token rate), _fundRaiseType (whether you are raising in POLY or ETH), _polyToken (address of POLY token), _fundsReceiver (address which will receive funds)"
                  },
                  "functionReturnParameters": 14068,
                  "id": 14070,
                  "nodeType": "Return",
                  "src": "2183:315:38"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 14072,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2142:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14067,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14072,
                  "src": "2165:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14066,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2165:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2164:8:38"
            },
            "scope": 14116,
            "src": "2118:387:38",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14114,
              "nodeType": "Block",
              "src": "2635:247:38",
              "statements": [
                {
                  "assignments": [
                    14081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14081,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 14115,
                      "src": "2645:30:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 14079,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2645:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14080,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2645:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14087,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 14085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2692:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        }
                      ],
                      "id": 14084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2678:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 14082,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2682:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14083,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2682:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 14086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2678:16:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2645:49:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14088,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2704:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14090,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 14089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2718:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2704:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "436170706564",
                      "id": 14091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2723:8:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_ea0ae8c04715067d85a72d739eb0eb29a1675ab457afd1b44648d1d56801ff8d",
                        "typeString": "literal_string \"Capped\""
                      },
                      "value": "Capped"
                    },
                    "src": "2704:27:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14093,
                  "nodeType": "ExpressionStatement",
                  "src": "2704:27:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14094,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2741:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14096,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 14095,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2755:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2741:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4e6f6e2d726566756e6461626c65",
                      "id": 14097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2760:16:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_500edffc1231e51f217a4f9dd1d05855b157bcf2508b5e0c5d6467dbf46db6bc",
                        "typeString": "literal_string \"Non-refundable\""
                      },
                      "value": "Non-refundable"
                    },
                    "src": "2741:35:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14099,
                  "nodeType": "ExpressionStatement",
                  "src": "2741:35:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14100,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2786:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14102,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 14101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2800:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2786:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "504f4c59",
                      "id": 14103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2805:6:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_42e9b9ff2964f66d264e07a2cd4c5234a8c8c5adbfc54101bd50b0744fcd261f",
                        "typeString": "literal_string \"POLY\""
                      },
                      "value": "POLY"
                    },
                    "src": "2786:25:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14105,
                  "nodeType": "ExpressionStatement",
                  "src": "2786:25:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14106,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2821:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14108,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 14107,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2835:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2821:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "455448",
                      "id": 14109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2840:5:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4",
                        "typeString": "literal_string \"ETH\""
                      },
                      "value": "ETH"
                    },
                    "src": "2821:24:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14111,
                  "nodeType": "ExpressionStatement",
                  "src": "2821:24:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14112,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14081,
                    "src": "2862:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 14077,
                  "id": 14113,
                  "nodeType": "Return",
                  "src": "2855:20:38"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 14115,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2601:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14076,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14115,
                  "src": "2624:9:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14074,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2624:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 14075,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2624:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2623:11:38"
            },
            "scope": 14116,
            "src": "2585:297:38",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 14117,
        "src": "195:2690:38"
      }
    ],
    "src": "0:2886:38"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTOFactory.sol",
    "exportedSymbols": {
      "CappedSTOFactory": [
        14116
      ]
    },
    "id": 14117,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13936,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:38"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTO.sol",
        "file": "./CappedSTO.sol",
        "id": 13937,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 13935,
        "src": "26:25:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../../interfaces/IModuleFactory.sol",
        "id": 13938,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 9955,
        "src": "52:45:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../../interfaces/IModule.sol",
        "id": 13939,
        "nodeType": "ImportDirective",
        "scope": 14117,
        "sourceUnit": 9718,
        "src": "98:38:38",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13940,
              "name": "IModuleFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 9954,
              "src": "224:14:38",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                "typeString": "contract IModuleFactory"
              }
            },
            "id": 13941,
            "nodeType": "InheritanceSpecifier",
            "src": "224:14:38"
          }
        ],
        "contractDependencies": [
          9954,
          13934,
          22664
        ],
        "contractKind": "contract",
        "documentation": "@title Factory for deploying CappedSTO module",
        "fullyImplemented": true,
        "id": 14116,
        "linearizedBaseContracts": [
          14116,
          9954,
          22664
        ],
        "name": "CappedSTOFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 13958,
              "nodeType": "Block",
              "src": "532:8:38",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _polyAddress Address of the polytoken",
            "id": 13959,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13952,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13943,
                    "src": "471:12:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13953,
                    "name": "_setupCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13945,
                    "src": "485:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13954,
                    "name": "_usageCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13947,
                    "src": "497:10:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13955,
                    "name": "_subscriptionCost",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13949,
                    "src": "509:17:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 13956,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13951,
                  "name": "IModuleFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9954,
                  "src": "456:14:38",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                    "typeString": "type(contract IModuleFactory)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "456:71:38"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13943,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "354:20:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13942,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13945,
                  "name": "_setupCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "376:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13944,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13947,
                  "name": "_usageCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "396:18:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13946,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "396:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13949,
                  "name": "_subscriptionCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 13959,
                  "src": "416:25:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13948,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "353:89:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 13957,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "532:0:38"
            },
            "scope": 14116,
            "src": "341:199:38",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14031,
              "nodeType": "Block",
              "src": "738:699:38",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13966,
                      "name": "setupCost",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9727,
                      "src": "751:9:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13967,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "763:1:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "751:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13980,
                  "nodeType": "IfStatement",
                  "src": "748:161:38",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13972,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23131,
                                "src": "809:3:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 13973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "809:10:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13974,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22582,
                              "src": "821:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 13975,
                              "name": "setupCost",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9727,
                              "src": "828:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13970,
                              "name": "polyToken",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9725,
                              "src": "786:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$22837",
                                "typeString": "contract ERC20"
                              }
                            },
                            "id": 13971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "transferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22819,
                            "src": "786:22:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) external returns (bool)"
                            }
                          },
                          "id": 13976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "786:52:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "4661696c6564207472616e7366657246726f6d2062656361757365206f6620737566666963656e7420416c6c6f77616e6365206973206e6f742070726f7669646564",
                          "id": 13977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "840:68:38",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          },
                          "value": "Failed transferFrom because of sufficent Allowance is not provided"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_39f8133d9e40dc5e6b34d9a9e536ce9c723fe05af13c2feb51de7d902ca65f7f",
                            "typeString": "literal_string \"Failed transferFrom because of sufficent Allowance is not provided\""
                          }
                        ],
                        "id": 13969,
                        "name": "require",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          23134,
                          23135
                        ],
                        "referencedDeclaration": 23135,
                        "src": "778:7:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                          "typeString": "function (bool,string memory) pure"
                        }
                      },
                      "id": 13978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "778:131:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 13979,
                    "nodeType": "ExpressionStatement",
                    "src": "778:131:38"
                  }
                },
                {
                  "assignments": [
                    13982
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13982,
                      "name": "cappedSTO",
                      "nodeType": "VariableDeclaration",
                      "scope": 14032,
                      "src": "984:19:38",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_CappedSTO_$13934",
                        "typeString": "contract CappedSTO"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13981,
                        "name": "CappedSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13934,
                        "src": "984:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13991,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13985,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1020:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13986,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1020:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13988,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9725,
                            "src": "1040:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          ],
                          "id": 13987,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1032:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 13989,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1032:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13984,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "1006:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_creation_nonpayable$_t_address_$_t_address_$returns$_t_contract$_CappedSTO_$13934_$",
                        "typeString": "function (address,address) returns (contract CappedSTO)"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 13983,
                        "name": "CappedSTO",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 13934,
                        "src": "1010:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      }
                    },
                    "id": 13990,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1006:45:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_CappedSTO_$13934",
                      "typeString": "contract CappedSTO"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "984:67:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 13999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 13994,
                              "name": "_data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13961,
                              "src": "1149:5:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 13993,
                            "name": "getSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9893,
                            "src": "1142:6:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                              "typeString": "function (bytes memory) pure returns (bytes4)"
                            }
                          },
                          "id": 13995,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1142:13:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13996,
                              "name": "cappedSTO",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13982,
                              "src": "1159:9:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                "typeString": "contract CappedSTO"
                              }
                            },
                            "id": 13997,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getInitFunction",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13472,
                            "src": "1159:25:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_pure$__$returns$_t_bytes4_$",
                              "typeString": "function () pure external returns (bytes4)"
                            }
                          },
                          "id": 13998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1159:27:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "1142:44:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "50726f76696465642064617461206973206e6f742076616c6964",
                        "id": 14000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1188:28:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        },
                        "value": "Provided data is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8008f13ad2e2367c07367b70af99d6be231b2b5463054f52084cbdc49de8315",
                          "typeString": "literal_string \"Provided data is not valid\""
                        }
                      ],
                      "id": 13992,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1134:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1134:83:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14002,
                  "nodeType": "ExpressionStatement",
                  "src": "1134:83:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14008,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13961,
                            "src": "1259:5:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 14005,
                                "name": "cappedSTO",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13982,
                                "src": "1243:9:38",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                  "typeString": "contract CappedSTO"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_CappedSTO_$13934",
                                  "typeString": "contract CappedSTO"
                                }
                              ],
                              "id": 14004,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1235:7:38",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 14006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1235:18:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 14007,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "call",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1235:23:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_barecall_payable$__$returns$_t_bool_$",
                            "typeString": "function () payable returns (bool)"
                          }
                        },
                        "id": 14009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1235:30:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e2d7375636365737366756c6c2063616c6c",
                        "id": 14010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1267:21:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        },
                        "value": "Un-successfull call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c4b1d57bea6997b31af3b7d5cb2f4ae47da92d71f0f5964b88132fc35f347c32",
                          "typeString": "literal_string \"Un-successfull call\""
                        }
                      ],
                      "id": 14003,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "1227:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1227:62:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14012,
                  "nodeType": "ExpressionStatement",
                  "src": "1227:62:38"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14015,
                            "name": "cappedSTO",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13982,
                            "src": "1341:9:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CappedSTO_$13934",
                              "typeString": "contract CappedSTO"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CappedSTO_$13934",
                              "typeString": "contract CappedSTO"
                            }
                          ],
                          "id": 14014,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1333:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14016,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1333:18:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 14017,
                          "name": "getName",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            14048
                          ],
                          "referencedDeclaration": 14048,
                          "src": "1353:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 14018,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1353:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 14020,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23274,
                            "src": "1372:4:38",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_CappedSTOFactory_$14116",
                              "typeString": "contract CappedSTOFactory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_CappedSTOFactory_$14116",
                              "typeString": "contract CappedSTOFactory"
                            }
                          ],
                          "id": 14019,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1364:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 14021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1364:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 14022,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1379:3:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 14023,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1379:10:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 14024,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "1391:3:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14013,
                      "name": "LogGenerateModuleFromFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9767,
                      "src": "1304:28:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes32,address,address,uint256)"
                      }
                    },
                    "id": 14025,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1304:91:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14026,
                  "nodeType": "EmitStatement",
                  "src": "1299:96:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 14028,
                        "name": "cappedSTO",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13982,
                        "src": "1420:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_CappedSTO_$13934",
                          "typeString": "contract CappedSTO"
                        }
                      ],
                      "id": 14027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1412:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": "address"
                    },
                    "id": 14029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1412:18:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 13965,
                  "id": 14030,
                  "nodeType": "Return",
                  "src": "1405:25:38"
                }
              ]
            },
            "documentation": "@notice used to launch the Module with the help of factory\n@return address Contract address of the Module",
            "id": 14032,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "deploy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13962,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13961,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 14032,
                  "src": "699:11:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 13960,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "699:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "698:13:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 13965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13964,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14032,
                  "src": "729:7:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "729:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "728:9:38"
            },
            "scope": 14116,
            "src": "683:754:38",
            "stateMutability": "nonpayable",
            "superFunction": 9804,
            "visibility": "external"
          },
          {
            "body": {
              "id": 14039,
              "nodeType": "Block",
              "src": "1547:25:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "33",
                    "id": 14037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1564:1:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_3_by_1",
                      "typeString": "int_const 3"
                    },
                    "value": "3"
                  },
                  "functionReturnParameters": 14036,
                  "id": 14038,
                  "nodeType": "Return",
                  "src": "1557:8:38"
                }
              ]
            },
            "documentation": "@notice Type of the Module factory",
            "id": 14040,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getType",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14033,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1517:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14036,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14035,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14040,
                  "src": "1540:5:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14034,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1540:5:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1539:7:38"
            },
            "scope": 14116,
            "src": "1501:71:38",
            "stateMutability": "view",
            "superFunction": 9809,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14047,
              "nodeType": "Block",
              "src": "1684:35:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "43617070656453544f",
                    "id": 14045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1701:11:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d3dba09dff35150cdb7d1c6862d285600c72a3858c9e94fd82de42e61b9824ab",
                      "typeString": "literal_string \"CappedSTO\""
                    },
                    "value": "CappedSTO"
                  },
                  "functionReturnParameters": 14044,
                  "id": 14046,
                  "nodeType": "Return",
                  "src": "1694:18:38"
                }
              ]
            },
            "documentation": "@notice Get the name of the Module",
            "id": 14048,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14041,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1652:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14043,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14048,
                  "src": "1675:7:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14042,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1675:7:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1674:9:38"
            },
            "scope": 14116,
            "src": "1636:83:38",
            "stateMutability": "view",
            "superFunction": 9814,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14055,
              "nodeType": "Block",
              "src": "1844:36:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4361707065642053544f",
                    "id": 14053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1861:12:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1555df6d0021d8c67ee7169df47ccaf6f86c37dfa3743034b95ea61e6ed7b9f6",
                      "typeString": "literal_string \"Capped STO\""
                    },
                    "value": "Capped STO"
                  },
                  "functionReturnParameters": 14052,
                  "id": 14054,
                  "nodeType": "Return",
                  "src": "1854:19:38"
                }
              ]
            },
            "documentation": "@notice Get the description of the Module",
            "id": 14056,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14049,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1813:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14052,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14051,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14056,
                  "src": "1836:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14050,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1836:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1835:8:38"
            },
            "scope": 14116,
            "src": "1790:90:38",
            "stateMutability": "view",
            "superFunction": 9819,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14063,
              "nodeType": "Block",
              "src": "1993:36:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "4361707065642053544f",
                    "id": 14061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2010:12:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1555df6d0021d8c67ee7169df47ccaf6f86c37dfa3743034b95ea61e6ed7b9f6",
                      "typeString": "literal_string \"Capped STO\""
                    },
                    "value": "Capped STO"
                  },
                  "functionReturnParameters": 14060,
                  "id": 14062,
                  "nodeType": "Return",
                  "src": "2003:19:38"
                }
              ]
            },
            "documentation": "@notice Get the title of the Module",
            "id": 14064,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTitle",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14057,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1962:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14059,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14064,
                  "src": "1985:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14058,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1985:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1984:8:38"
            },
            "scope": 14116,
            "src": "1945:84:38",
            "stateMutability": "view",
            "superFunction": 9824,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14071,
              "nodeType": "Block",
              "src": "2173:332:38",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "496e697469616c697365732061206361707065642053544f2e20496e697420706172616d657465727320617265205f737461727454696d65202874696d652053544f20737461727473292c205f656e6454696d65202874696d652053544f20656e6473292c205f636170202863617020696e20746f6b656e7320666f722053544f292c205f726174652028504f4c592f45544820746f20746f6b656e2072617465292c205f66756e6452616973655479706520287768657468657220796f75206172652072616973696e6720696e20504f4c59206f7220455448292c205f706f6c79546f6b656e202861646472657373206f6620504f4c5920746f6b656e292c205f66756e647352656365697665722028616464726573732077686963682077696c6c20726563656976652066756e647329",
                    "id": 14069,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2190:308:38",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_d9ef457c2755e64217ca9e90cc3d65779631365ac15b28ff9405184aa4dba3ae",
                      "typeString": "literal_string \"Initialises a capped STO. Init parameters are _startTime (time STO starts), _endTime (time STO ends), _cap (cap in tokens for STO), _rate (POLY/ETH to token rate), _fundRaiseType (whether you are raising in POLY or ETH), _polyToken (address of POLY token), _fundsReceiver (address which will receive funds)\""
                    },
                    "value": "Initialises a capped STO. Init parameters are _startTime (time STO starts), _endTime (time STO ends), _cap (cap in tokens for STO), _rate (POLY/ETH to token rate), _fundRaiseType (whether you are raising in POLY or ETH), _polyToken (address of POLY token), _fundsReceiver (address which will receive funds)"
                  },
                  "functionReturnParameters": 14068,
                  "id": 14070,
                  "nodeType": "Return",
                  "src": "2183:315:38"
                }
              ]
            },
            "documentation": "@notice Get the Instructions that helped to used the module",
            "id": 14072,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInstructions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14065,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2142:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14067,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14072,
                  "src": "2165:6:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14066,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2165:6:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2164:8:38"
            },
            "scope": 14116,
            "src": "2118:387:38",
            "stateMutability": "view",
            "superFunction": 9829,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14114,
              "nodeType": "Block",
              "src": "2635:247:38",
              "statements": [
                {
                  "assignments": [
                    14081
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14081,
                      "name": "availableTags",
                      "nodeType": "VariableDeclaration",
                      "scope": 14115,
                      "src": "2645:30:38",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 14079,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2645:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14080,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2645:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 14087,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 14085,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2692:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        }
                      ],
                      "id": 14084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "2678:13:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 14082,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2682:7:38",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 14083,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "2682:9:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 14086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2678:16:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2645:49:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14092,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14088,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2704:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14090,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 14089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2718:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2704:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "436170706564",
                      "id": 14091,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2723:8:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_ea0ae8c04715067d85a72d739eb0eb29a1675ab457afd1b44648d1d56801ff8d",
                        "typeString": "literal_string \"Capped\""
                      },
                      "value": "Capped"
                    },
                    "src": "2704:27:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14093,
                  "nodeType": "ExpressionStatement",
                  "src": "2704:27:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14094,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2741:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14096,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 14095,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2755:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2741:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "4e6f6e2d726566756e6461626c65",
                      "id": 14097,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2760:16:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_500edffc1231e51f217a4f9dd1d05855b157bcf2508b5e0c5d6467dbf46db6bc",
                        "typeString": "literal_string \"Non-refundable\""
                      },
                      "value": "Non-refundable"
                    },
                    "src": "2741:35:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14099,
                  "nodeType": "ExpressionStatement",
                  "src": "2741:35:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14100,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2786:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14102,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "32",
                        "id": 14101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2800:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_2_by_1",
                          "typeString": "int_const 2"
                        },
                        "value": "2"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2786:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "504f4c59",
                      "id": 14103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2805:6:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_42e9b9ff2964f66d264e07a2cd4c5234a8c8c5adbfc54101bd50b0744fcd261f",
                        "typeString": "literal_string \"POLY\""
                      },
                      "value": "POLY"
                    },
                    "src": "2786:25:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14105,
                  "nodeType": "ExpressionStatement",
                  "src": "2786:25:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 14106,
                        "name": "availableTags",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14081,
                        "src": "2821:13:38",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 14108,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "33",
                        "id": 14107,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2835:1:38",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_3_by_1",
                          "typeString": "int_const 3"
                        },
                        "value": "3"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2821:16:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "455448",
                      "id": 14109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2840:5:38",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4",
                        "typeString": "literal_string \"ETH\""
                      },
                      "value": "ETH"
                    },
                    "src": "2821:24:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 14111,
                  "nodeType": "ExpressionStatement",
                  "src": "2821:24:38"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 14112,
                    "name": "availableTags",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14081,
                    "src": "2862:13:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 14077,
                  "id": 14113,
                  "nodeType": "Return",
                  "src": "2855:20:38"
                }
              ]
            },
            "documentation": "@notice Get the tags related to the module factory",
            "id": 14115,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTags",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14073,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2601:2:38"
            },
            "payable": false,
            "returnParameters": {
              "id": 14077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14076,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 14115,
                  "src": "2624:9:38",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 14074,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2624:7:38",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 14075,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2624:9:38",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2623:11:38"
            },
            "scope": 14116,
            "src": "2585:297:38",
            "stateMutability": "view",
            "superFunction": 9835,
            "visibility": "public"
          }
        ],
        "scope": 14117,
        "src": "195:2690:38"
      }
    ],
    "src": "0:2886:38"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "15": {
      "events": {},
      "links": {},
      "address": "0x55b91266df02f05fd5315ebec620d94314ba4bec",
      "transactionHash": "0x0210ba719b6387d8b75dee75207f7fbbadbe9cbee13533eba15b1ddb345140b5"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:28.925Z"
}