{
  "contractName": "FDTFactory",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "distributor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        }
      ],
      "name": "DeployedDistributor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proxy",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "logic",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "salt",
          "type": "uint256"
        }
      ],
      "name": "NewEip1167Proxy",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "salt",
          "type": "uint256"
        }
      ],
      "name": "createERC20Distributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "salt",
          "type": "uint256"
        }
      ],
      "name": "createRestrictedERC20Distributor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"distributor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"}],\"name\":\"DeployedDistributor\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"logic\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"NewEip1167Proxy\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createERC20Distributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createRestrictedERC20Distributor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"createERC20Distributor(string,string,uint256,address,address,uint256)\":{\"details\":\"mints initial supply after deploying the tokenized distributor contract\",\"params\":{\"initialSupply\":\"of distributor tokens\",\"name\":\"name of the token\",\"symbol\":\"of the token\"}}},\"title\":\"FDTFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createERC20Distributor(string,string,uint256,address,address,uint256)\":{\"notice\":\"deploys a new tokenized distributor contract for a specified ERC20 token\"}},\"notice\":\"Factory for deploying FDT contracts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol\":\"FDTFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol\":{\"keccak256\":\"0x7488fc2b008a367e19e72a4d6403dc3fc34f7ba4c7250e8f64c4684a1706b2f1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b46e2ce4ccb45eb3247a7a32b02e7c7bdd144b58bf7f1f5c0e849487a8dca01b\",\"dweb:/ipfs/QmSm1evy1eoCBKPwsYe7dZuA4zFV4Mr6zcJKTmHF3DKuMv\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol\":{\"keccak256\":\"0x367de24e2fcd7cd02aabe65af0afc0c5184781135bb826835a82d406f33c93b5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f08d02e99e8daf2be5f2067c12f2c81aff1983fa49eebbe9cf5bea75ae4f308c\",\"dweb:/ipfs/QmX1xtraEs8QwFF9tBTBPnuoU5mP3k9X9U1Y9eMoEjNyB7\"]},\"/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol\":{\"keccak256\":\"0xc3942bee11e73ceca1ef49154ba1a6dbe3ac25ce5e369d72db0f82185d1d10ba\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f1fc9bb98809b73920ac896aa9cbac809f3990a39f10dc06f2f3156f270dee79\",\"dweb:/ipfs/QmVPJojnqGrcMuJ1nvNbxJwLWBsbmkJtWePw55QU5Hk1Xc\"]},\"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x6cc1cb934a3ac2137a7dcaed018af9e235392236ceecfd3687259702b9c767ad\",\"urls\":[\"bzz-raw://0055fa88138cd1c3c6440370f8580f85857f8fe9dec41c99af9eafbeb8d9c3ce\",\"dweb:/ipfs/QmX1xDh8vwGLLCH8ti45eXjQ7Wcxv1FEGTR3jkFnd5Nv6F\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol\":{\"keccak256\":\"0x5f7da58ee3d9faa9b8999a93d49c8ff978f1afc88ae9bcfc6f9cbb44da011c2b\",\"urls\":[\"bzz-raw://4f089d954b3ecaa26949412fe63e9a184b056562c6c13dd4a0529a5d9a2e685a\",\"dweb:/ipfs/QmVK5iCNAMcEJQxT59bsC5E53JQASDQPU6khHox3d5ZXCn\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061053d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634a6660251461003b57806384fb160414610050575b600080fd5b61004e6100493660046102e5565b610063565b005b61004e61005e3660046102e5565b610094565b73__VanillaFDTLogic_______________________61008989898989898989888a6100b6565b505050505050505050565b73__SimpleRestrictedFDTLogic______________61008989898989898989888a5b6001600160a01b0384166100e55760405162461bcd60e51b81526004016100dc90610441565b60405180910390fd5b60006100f183836101a3565b6040516364d5d05560e11b81529091506001600160a01b0382169063c9aba0aa9061012c908d908d908d908d908c908c908f906004016103f3565b600060405180830381600087803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b505050507f82f3582e365923e3007601a66bd8388dec15b8f9ee46cd2e527c4e28fbe9847c813360405161018f9291906103b5565b60405180910390a150505050505050505050565b60006101b7836001600160a01b0316610262565b6101d35760405162461bcd60e51b81526004016100dc90610492565b60008360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f59250507fc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e0828585604051610253939291906103cf565b60405180910390a15092915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061029657508115155b949350505050565b60008083601f8401126102af578182fd5b50813567ffffffffffffffff8111156102c6578182fd5b6020830191508360208285010111156102de57600080fd5b9250929050565b60008060008060008060008060c0898b031215610300578384fd5b883567ffffffffffffffff80821115610317578586fd5b6103238c838d0161029e565b909a50985060208b013591508082111561033b578586fd5b506103488b828c0161029e565b909750955050604089013593506060890135610363816104ef565b92506080890135610373816104ef565b8092505060a089013590509295985092959890939650565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060a0825261040760a08301898b61038b565b828103602084015261041a81888a61038b565b6001600160a01b039687166040850152949095166060830152506080015295945050505050565b60208082526031908201527f464454466163746f72792e6372656174654644543a20494e56414c49445f46556040820152704e4354494f4e5f504152414d455445525360781b606082015260800190565b6020808252603d908201527f50726f7879466163746f72792e637265617465324569703131363750726f787960408201527f3a20494e56414c49445f46554e4354494f4e5f504152414d4554455253000000606082015260800190565b6001600160a01b038116811461050457600080fd5b5056fea2646970667358221220e671e81d409b71dc581bfcc9eb9dd03a77c82d0b575ca105859b875febd7390c64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80634a6660251461003b57806384fb160414610050575b600080fd5b61004e6100493660046102e5565b610063565b005b61004e61005e3660046102e5565b610094565b73__VanillaFDTLogic_______________________61008989898989898989888a6100b6565b505050505050505050565b73__SimpleRestrictedFDTLogic______________61008989898989898989888a5b6001600160a01b0384166100e55760405162461bcd60e51b81526004016100dc90610441565b60405180910390fd5b60006100f183836101a3565b6040516364d5d05560e11b81529091506001600160a01b0382169063c9aba0aa9061012c908d908d908d908d908c908c908f906004016103f3565b600060405180830381600087803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b505050507f82f3582e365923e3007601a66bd8388dec15b8f9ee46cd2e527c4e28fbe9847c813360405161018f9291906103b5565b60405180910390a150505050505050505050565b60006101b7836001600160a01b0316610262565b6101d35760405162461bcd60e51b81526004016100dc90610492565b60008360601b9050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b6028820152836037826000f59250507fc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e0828585604051610253939291906103cf565b60405180910390a15092915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061029657508115155b949350505050565b60008083601f8401126102af578182fd5b50813567ffffffffffffffff8111156102c6578182fd5b6020830191508360208285010111156102de57600080fd5b9250929050565b60008060008060008060008060c0898b031215610300578384fd5b883567ffffffffffffffff80821115610317578586fd5b6103238c838d0161029e565b909a50985060208b013591508082111561033b578586fd5b506103488b828c0161029e565b909750955050604089013593506060890135610363816104ef565b92506080890135610373816104ef565b8092505060a089013590509295985092959890939650565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060a0825261040760a08301898b61038b565b828103602084015261041a81888a61038b565b6001600160a01b039687166040850152949095166060830152506080015295945050505050565b60208082526031908201527f464454466163746f72792e6372656174654644543a20494e56414c49445f46556040820152704e4354494f4e5f504152414d455445525360781b606082015260800190565b6020808252603d908201527f50726f7879466163746f72792e637265617465324569703131363750726f787960408201527f3a20494e56414c49445f46554e4354494f4e5f504152414d4554455253000000606082015260800190565b6001600160a01b038116811461050457600080fd5b5056fea2646970667358221220e671e81d409b71dc581bfcc9eb9dd03a77c82d0b575ca105859b875febd7390c64736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "662:1739:47:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "662:1739:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1077:351;;;;;;:::i;:::-;;:::i;:::-;;1434:370;;;;;;:::i;:::-;;:::i;1077:351::-;1322:24;1356:65;1366:4;;1372:6;;1380:13;1395:5;1402;1322:24;1416:4;1356:9;:65::i;:::-;1077:351;;;;;;;;;:::o;1434:370::-;1689:33;1732:65;1742:4;;1748:6;;1756:13;1771:5;1778;1689:33;1792:4;1810:589;-1:-1:-1;;;;;2070:28:47;;2049:124;;;;-1:-1:-1;;;2049:124:47;;;;;;;:::i;:::-;;;;;;;;;2184:19;2206:32;2226:5;2233:4;2206:19;:32::i;:::-;2248:84;;-1:-1:-1;;;2248:84:47;;2184:54;;-1:-1:-1;;;;;;2248:41:47;;;;;:84;;2290:4;;;;2296:6;;;;2304:5;;2311;;2318:13;;2248:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2348:44;2368:11;2381:10;2348:44;;;;;;;:::i;:::-;;;;;;;;1810:589;;;;;;;;;;:::o;613:1140:72:-;689:15;741:18;:5;-1:-1:-1;;;;;741:16:72;;:18::i;:::-;720:126;;;;-1:-1:-1;;;720:126:72;;;;;;;:::i;:::-;857:19;887:5;879:14;;857:36;;948:4;942:11;-1:-1:-1;;;1279:8:72;1272:84;1397:11;1390:4;1380:8;1376:19;1369:40;-1:-1:-1;;;1443:4:72;1433:8;1429:19;1422:95;1667:4;1626;1600:8;1567:1;1542:143;1531:154;;;1709:37;1725:7;1734:5;1741:4;1709:37;;;;;;;;:::i;:::-;;;;;;;;613:1140;;;;;:::o;685:610:113:-;745:4;1206:20;;1051:66;1245:23;;;;;;:42;;-1:-1:-1;1272:15:113;;;1245:42;1237:51;685:610;-1:-1:-1;;;;685:610:113:o;326:337:-1:-;;;441:3;434:4;426:6;422:17;418:27;408:2;;-1:-1;;449:12;408:2;-1:-1;479:20;;519:18;508:30;;505:2;;;-1:-1;;541:12;505:2;585:4;577:6;573:17;561:29;;636:3;585:4;616:17;577:6;602:32;;599:41;596:2;;;653:1;;643:12;596:2;401:262;;;;;:::o;808:1153::-;;;;;;;;;1053:3;1041:9;1032:7;1028:23;1024:33;1021:2;;;-1:-1;;1060:12;1021:2;1118:17;1105:31;1156:18;;1148:6;1145:30;1142:2;;;-1:-1;;1178:12;1142:2;1216:65;1273:7;1264:6;1253:9;1249:22;1216:65;:::i;:::-;1198:83;;-1:-1;1198:83;-1:-1;1346:2;1331:18;;1318:32;;-1:-1;1359:30;;;1356:2;;;-1:-1;;1392:12;1356:2;;1430:65;1487:7;1478:6;1467:9;1463:22;1430:65;:::i;:::-;1412:83;;-1:-1;1412:83;-1:-1;;1532:2;1571:22;;738:20;;-1:-1;1640:2;1695:22;;225:20;250:49;225:20;250:49;:::i;:::-;1648:79;-1:-1;1764:3;1804:22;;72:20;97:33;72:20;97:33;:::i;:::-;1773:63;;;;1873:3;1917:9;1913:22;738:20;1882:63;;1015:946;;;;;;;;;;;:::o;2427:300::-;;6349:6;6344:3;6337:19;7576:6;7571:3;6386:4;6381:3;6377:14;7553:30;-1:-1;6386:4;7623:6;6381:3;7614:16;;7607:27;6386:4;7732:7;;7736:2;2713:6;7716:14;7712:28;6381:3;2682:39;;2675:46;;2529:198;;;;;:::o;3657:349::-;-1:-1;;;;;6679:54;;;2188:37;;6679:54;;3992:2;3977:18;;2047:58;3820:2;3805:18;;3791:215::o;4013:444::-;-1:-1;;;;;6679:54;;;2188:37;;6679:54;;;;4360:2;4345:18;;2188:37;4443:2;4428:18;;3608:37;;;;4196:2;4181:18;;4167:290::o;4464:916::-;;4779:3;4801:17;4794:47;4855:88;4779:3;4768:9;4764:19;4929:6;4921;4855:88;:::i;:::-;4991:9;4985:4;4981:20;4976:2;4965:9;4961:18;4954:48;5016:88;5099:4;5090:6;5082;5016:88;:::i;:::-;-1:-1;;;;;6679:54;;;5199:2;5184:18;;2324:66;6679:54;;;;5282:2;5267:18;;2188:37;-1:-1;5365:3;5350:19;3608:37;5008:96;4750:630;-1:-1;;;;;4750:630::o;5387:416::-;5587:2;5601:47;;;2960:2;5572:18;;;6337:19;2996:34;6377:14;;;2976:55;-1:-1;;;3051:12;;;3044:41;3104:12;;;5558:245::o;5810:416::-;6010:2;6024:47;;;3355:2;5995:18;;;6337:19;3391:34;6377:14;;;3371:55;3460:31;3446:12;;;3439:53;3511:12;;;5981:245::o;7753:117::-;-1:-1;;;;;6679:54;;7812:35;;7802:2;;7861:1;;7851:12;7802:2;7796:74;:::o",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol\";\nimport \"./IInitializableFDT.sol\";\nimport \"../proxy/ProxyFactory.sol\";\n\n// @dev Mock lib to link pre-deployed ProxySafeVanillaFDT contract\nlibrary VanillaFDTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n// @dev Mock lib to link pre-deployed ProxySafeSimpleRestrictedFDT contract\nlibrary SimpleRestrictedFDTLogic {\n    function _() public pure { revert(\"never deploy it\"); }\n}\n\n/**\n * @title FDTFactory\n * @notice Factory for deploying FDT contracts\n */\ncontract FDTFactory is ProxyFactory {\n\n    event DeployedDistributor(address distributor, address creator);\n\n\n    /**\n     * deploys a new tokenized distributor contract for a specified ERC20 token\n     * @dev mints initial supply after deploying the tokenized distributor contract\n     * @param name name of the token\n     * @param symbol of the token\n     * @param initialSupply of distributor tokens\n     */\n    function createERC20Distributor(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(VanillaFDTLogic);\n        createFDT(name, symbol, initialSupply, token, owner, logic, salt);\n    }\n\n    function createRestrictedERC20Distributor(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        uint256 salt\n    )\n        external\n    {\n        address logic = address(SimpleRestrictedFDTLogic);\n        createFDT(name, symbol, initialSupply, token, owner, logic, salt);\n    }\n\n    function createFDT(\n        string calldata name,\n        string calldata symbol,\n        uint256 initialSupply,\n        IERC20 token,\n        address owner,\n        address logic,\n        uint256 salt\n    )\n        internal\n    {\n        require(\n            address(token) != address(0),\n            \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\"\n        );\n\n        address distributor = create2Eip1167Proxy(logic, salt);\n        IInitializableFDT(distributor).initialize(name, symbol, token, owner, initialSupply);\n\n        emit DeployedDistributor(distributor, msg.sender);\n    }\n}\n",
  "sourcePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
  "ast": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
    "exportedSymbols": {
      "FDTFactory": [
        18027
      ],
      "SimpleRestrictedFDTLogic": [
        17895
      ],
      "VanillaFDTLogic": [
        17886
      ]
    },
    "id": 18028,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17873,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:47"
      },
      {
        "id": 17874,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 17875,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 38236,
        "src": "101:83:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol",
        "file": "./IInitializableFDT.sol",
        "id": 17876,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 18362,
        "src": "185:33:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 17877,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 22446,
        "src": "219:35:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17886,
        "linearizedBaseContracts": [
          17886
        ],
        "name": "VanillaFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17884,
              "nodeType": "Block",
              "src": "378:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "387:17:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 17880,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "380:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "380:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17883,
                  "nodeType": "ExpressionStatement",
                  "src": "380:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17885,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:2:47"
            },
            "returnParameters": {
              "id": 17879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "378:0:47"
            },
            "scope": 17886,
            "src": "353:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "323:87:47"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17895,
        "linearizedBaseContracts": [
          17895
        ],
        "name": "SimpleRestrictedFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17893,
              "nodeType": "Block",
              "src": "552:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "561:17:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 17889,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "554:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "554:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17892,
                  "nodeType": "ExpressionStatement",
                  "src": "554:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "537:2:47"
            },
            "returnParameters": {
              "id": 17888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "552:0:47"
            },
            "scope": 17895,
            "src": "527:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "488:96:47"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17897,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "685:12:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 17898,
            "nodeType": "InheritanceSpecifier",
            "src": "685:12:47"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 17896,
          "nodeType": "StructuredDocumentation",
          "src": "586:75:47",
          "text": " @title FDTFactory\n @notice Factory for deploying FDT contracts"
        },
        "fullyImplemented": true,
        "id": 18027,
        "linearizedBaseContracts": [
          18027,
          22445
        ],
        "name": "FDTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 17904,
            "name": "DeployedDistributor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17900,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "distributor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "731:19:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17902,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "752:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "752:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:38:47"
            },
            "src": "705:64:47"
          },
          {
            "body": {
              "id": 17937,
              "nodeType": "Block",
              "src": "1296:132:47",
              "statements": [
                {
                  "assignments": [
                    17921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17921,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17937,
                      "src": "1306:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17920,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17924,
                        "name": "VanillaFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17886,
                        "src": "1330:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      ],
                      "id": 17923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1322:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17922,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1322:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1322:24:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:40:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17928,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17907,
                        "src": "1366:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17929,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17909,
                        "src": "1372:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17911,
                        "src": "1380:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17931,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17913,
                        "src": "1395:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17932,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17915,
                        "src": "1402:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17933,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17921,
                        "src": "1409:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17934,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17917,
                        "src": "1416:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17927,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1356:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17936,
                  "nodeType": "ExpressionStatement",
                  "src": "1356:65:47"
                }
              ]
            },
            "documentation": {
              "id": 17905,
              "nodeType": "StructuredDocumentation",
              "src": "776:296:47",
              "text": " deploys a new tokenized distributor contract for a specified ERC20 token\n @dev mints initial supply after deploying the tokenized distributor contract\n @param name name of the token\n @param symbol of the token\n @param initialSupply of distributor tokens"
            },
            "functionSelector": "4a666025",
            "id": 17938,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17907,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1118:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17906,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1118:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17909,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1148:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17908,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17911,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1180:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1180:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17913,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1211:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17912,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1211:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17915,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1233:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17917,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1256:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17916,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1256:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1108:166:47"
            },
            "returnParameters": {
              "id": 17919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1296:0:47"
            },
            "scope": 18027,
            "src": "1077:351:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17970,
              "nodeType": "Block",
              "src": "1663:141:47",
              "statements": [
                {
                  "assignments": [
                    17954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17954,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17970,
                      "src": "1673:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17953,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1673:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17957,
                        "name": "SimpleRestrictedFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17895,
                        "src": "1697:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      ],
                      "id": 17956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1689:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17955,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1689:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1689:33:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1673:49:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17961,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17940,
                        "src": "1742:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17962,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17942,
                        "src": "1748:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17963,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17944,
                        "src": "1756:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17964,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17946,
                        "src": "1771:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17965,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17948,
                        "src": "1778:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17966,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17954,
                        "src": "1785:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17967,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17950,
                        "src": "1792:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17960,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1732:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1732:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17969,
                  "nodeType": "ExpressionStatement",
                  "src": "1732:65:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "84fb1604",
            "id": 17971,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createRestrictedERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17940,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1485:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17939,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1485:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17942,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1515:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17941,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1515:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17944,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1547:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17946,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1578:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17945,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1578:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17948,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1600:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1600:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17950,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1623:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1475:166:47"
            },
            "returnParameters": {
              "id": 17952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:47"
            },
            "scope": 18027,
            "src": "1434:370:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18025,
              "nodeType": "Block",
              "src": "2039:360:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17991,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17979,
                              "src": "2078:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 17990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2070:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17989,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2070:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2070:14:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2096:1:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2088:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17993,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2088:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2088:10:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2070:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "464454466163746f72792e6372656174654644543a20494e56414c49445f46554e4354494f4e5f504152414d4554455253",
                        "id": 17998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2112:51:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        },
                        "value": "FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        }
                      ],
                      "id": 17988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2049:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2049:124:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18000,
                  "nodeType": "ExpressionStatement",
                  "src": "2049:124:47"
                },
                {
                  "assignments": [
                    18002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18002,
                      "mutability": "mutable",
                      "name": "distributor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18025,
                      "src": "2184:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2184:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18004,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17983,
                        "src": "2226:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18005,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17985,
                        "src": "2233:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18003,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "2206:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 18006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2184:54:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17973,
                        "src": "2290:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17975,
                        "src": "2296:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18014,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17979,
                        "src": "2304:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18015,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "2311:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18016,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17977,
                        "src": "2318:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18009,
                            "name": "distributor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18002,
                            "src": "2266:11:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18008,
                          "name": "IInitializableFDT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18361,
                          "src": "2248:17:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableFDT_$18361_$",
                            "typeString": "type(contract IInitializableFDT)"
                          }
                        },
                        "id": 18010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2248:30:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableFDT_$18361",
                          "typeString": "contract IInitializableFDT"
                        }
                      },
                      "id": 18011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18360,
                      "src": "2248:41:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256) external"
                      }
                    },
                    "id": 18017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2248:84:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18018,
                  "nodeType": "ExpressionStatement",
                  "src": "2248:84:47"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18020,
                        "name": "distributor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18002,
                        "src": "2368:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18021,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2381:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2381:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 18019,
                      "name": "DeployedDistributor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17904,
                      "src": "2348:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 18023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2348:44:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18024,
                  "nodeType": "EmitStatement",
                  "src": "2343:49:47"
                }
              ]
            },
            "documentation": null,
            "id": 18026,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createFDT",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17973,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1838:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17972,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1838:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17975,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1868:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17974,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1868:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17977,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1900:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1900:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17979,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1931:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17978,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1931:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17981,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1953:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17983,
                  "mutability": "mutable",
                  "name": "logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1976:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17985,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1999:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1828:189:47"
            },
            "returnParameters": {
              "id": 17987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2039:0:47"
            },
            "scope": 18027,
            "src": "1810:589:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 18028,
        "src": "662:1739:47"
      }
    ],
    "src": "41:2361:47"
  },
  "legacyAST": {
    "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/FDTFactory.sol",
    "exportedSymbols": {
      "FDTFactory": [
        18027
      ],
      "SimpleRestrictedFDTLogic": [
        17895
      ],
      "VanillaFDTLogic": [
        17886
      ]
    },
    "id": 18028,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 17873,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:47"
      },
      {
        "id": 17874,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:47"
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol",
        "id": 17875,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 38236,
        "src": "101:83:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/FDT/IInitializableFDT.sol",
        "file": "./IInitializableFDT.sol",
        "id": 17876,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 18362,
        "src": "185:33:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/johannes/Documents/dev/actus-protocol/ap-monorepo/packages/ap-contracts/contracts/proxy/ProxyFactory.sol",
        "file": "../proxy/ProxyFactory.sol",
        "id": 17877,
        "nodeType": "ImportDirective",
        "scope": 18028,
        "sourceUnit": 22446,
        "src": "219:35:47",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17886,
        "linearizedBaseContracts": [
          17886
        ],
        "name": "VanillaFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17884,
              "nodeType": "Block",
              "src": "378:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17881,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "387:17:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 17880,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "380:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17882,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "380:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17883,
                  "nodeType": "ExpressionStatement",
                  "src": "380:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17885,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17878,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "363:2:47"
            },
            "returnParameters": {
              "id": 17879,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "378:0:47"
            },
            "scope": 17886,
            "src": "353:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "323:87:47"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 17895,
        "linearizedBaseContracts": [
          17895
        ],
        "name": "SimpleRestrictedFDTLogic",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 17893,
              "nodeType": "Block",
              "src": "552:30:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "6e65766572206465706c6f79206974",
                        "id": 17890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "561:17:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        },
                        "value": "never deploy it"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_5c3ea3824b28fc802dfb22c706b19be143660cb22579e35d4b0641d8d633d1b4",
                          "typeString": "literal_string \"never deploy it\""
                        }
                      ],
                      "id": 17889,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "554:6:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 17891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "554:25:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17892,
                  "nodeType": "ExpressionStatement",
                  "src": "554:25:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "b7ba4583",
            "id": 17894,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17887,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "537:2:47"
            },
            "returnParameters": {
              "id": 17888,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "552:0:47"
            },
            "scope": 17895,
            "src": "527:55:47",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 18028,
        "src": "488:96:47"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 17897,
              "name": "ProxyFactory",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22445,
              "src": "685:12:47",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ProxyFactory_$22445",
                "typeString": "contract ProxyFactory"
              }
            },
            "id": 17898,
            "nodeType": "InheritanceSpecifier",
            "src": "685:12:47"
          }
        ],
        "contractDependencies": [
          22445
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 17896,
          "nodeType": "StructuredDocumentation",
          "src": "586:75:47",
          "text": " @title FDTFactory\n @notice Factory for deploying FDT contracts"
        },
        "fullyImplemented": true,
        "id": 18027,
        "linearizedBaseContracts": [
          18027,
          22445
        ],
        "name": "FDTFactory",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": null,
            "id": 17904,
            "name": "DeployedDistributor",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 17903,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17900,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "distributor",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "731:19:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17899,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "731:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17902,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17904,
                  "src": "752:15:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17901,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "752:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "730:38:47"
            },
            "src": "705:64:47"
          },
          {
            "body": {
              "id": 17937,
              "nodeType": "Block",
              "src": "1296:132:47",
              "statements": [
                {
                  "assignments": [
                    17921
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17921,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17937,
                      "src": "1306:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17920,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1306:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17926,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17924,
                        "name": "VanillaFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17886,
                        "src": "1330:15:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_VanillaFDTLogic_$17886_$",
                          "typeString": "type(library VanillaFDTLogic)"
                        }
                      ],
                      "id": 17923,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1322:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17922,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1322:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1322:24:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1306:40:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17928,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17907,
                        "src": "1366:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17929,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17909,
                        "src": "1372:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17930,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17911,
                        "src": "1380:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17931,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17913,
                        "src": "1395:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17932,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17915,
                        "src": "1402:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17933,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17921,
                        "src": "1409:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17934,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17917,
                        "src": "1416:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17927,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1356:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1356:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17936,
                  "nodeType": "ExpressionStatement",
                  "src": "1356:65:47"
                }
              ]
            },
            "documentation": {
              "id": 17905,
              "nodeType": "StructuredDocumentation",
              "src": "776:296:47",
              "text": " deploys a new tokenized distributor contract for a specified ERC20 token\n @dev mints initial supply after deploying the tokenized distributor contract\n @param name name of the token\n @param symbol of the token\n @param initialSupply of distributor tokens"
            },
            "functionSelector": "4a666025",
            "id": 17938,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17907,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1118:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17906,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1118:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17909,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1148:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17908,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17911,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1180:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17910,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1180:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17913,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1211:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17912,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1211:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17915,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1233:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17914,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1233:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17917,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17938,
                  "src": "1256:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17916,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1256:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1108:166:47"
            },
            "returnParameters": {
              "id": 17919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1296:0:47"
            },
            "scope": 18027,
            "src": "1077:351:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 17970,
              "nodeType": "Block",
              "src": "1663:141:47",
              "statements": [
                {
                  "assignments": [
                    17954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 17954,
                      "mutability": "mutable",
                      "name": "logic",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 17970,
                      "src": "1673:13:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 17953,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1673:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 17959,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17957,
                        "name": "SimpleRestrictedFDTLogic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17895,
                        "src": "1697:24:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_type$_t_contract$_SimpleRestrictedFDTLogic_$17895_$",
                          "typeString": "type(library SimpleRestrictedFDTLogic)"
                        }
                      ],
                      "id": 17956,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1689:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 17955,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1689:7:47",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 17958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1689:33:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1673:49:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 17961,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17940,
                        "src": "1742:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17962,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17942,
                        "src": "1748:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17963,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17944,
                        "src": "1756:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17964,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17946,
                        "src": "1771:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17965,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17948,
                        "src": "1778:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17966,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17954,
                        "src": "1785:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 17967,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17950,
                        "src": "1792:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 17960,
                      "name": "createFDT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18026,
                      "src": "1732:9:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$_t_string_calldata_ptr_$_t_uint256_$_t_contract$_IERC20_$38235_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string calldata,string calldata,uint256,contract IERC20,address,address,uint256)"
                      }
                    },
                    "id": 17968,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1732:65:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 17969,
                  "nodeType": "ExpressionStatement",
                  "src": "1732:65:47"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "84fb1604",
            "id": 17971,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createRestrictedERC20Distributor",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17940,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1485:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17939,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1485:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17942,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1515:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17941,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1515:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17944,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1547:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17946,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1578:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17945,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1578:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17948,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1600:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1600:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17950,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 17971,
                  "src": "1623:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1623:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1475:166:47"
            },
            "returnParameters": {
              "id": 17952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1663:0:47"
            },
            "scope": 18027,
            "src": "1434:370:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 18025,
              "nodeType": "Block",
              "src": "2039:360:47",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 17997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 17991,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 17979,
                              "src": "2078:5:47",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IERC20_$38235",
                                "typeString": "contract IERC20"
                              }
                            ],
                            "id": 17990,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2070:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17989,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2070:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17992,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2070:14:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 17995,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2096:1:47",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 17994,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2088:7:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 17993,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2088:7:47",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 17996,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2088:10:47",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2070:28:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "464454466163746f72792e6372656174654644543a20494e56414c49445f46554e4354494f4e5f504152414d4554455253",
                        "id": 17998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2112:51:47",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        },
                        "value": "FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_56c912b6b44cc39f851e3882ba96e2a88a468101e95a9277a320e1078af714ae",
                          "typeString": "literal_string \"FDTFactory.createFDT: INVALID_FUNCTION_PARAMETERS\""
                        }
                      ],
                      "id": 17988,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2049:7:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 17999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2049:124:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18000,
                  "nodeType": "ExpressionStatement",
                  "src": "2049:124:47"
                },
                {
                  "assignments": [
                    18002
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 18002,
                      "mutability": "mutable",
                      "name": "distributor",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 18025,
                      "src": "2184:19:47",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 18001,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2184:7:47",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 18007,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18004,
                        "name": "logic",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17983,
                        "src": "2226:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18005,
                        "name": "salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17985,
                        "src": "2233:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 18003,
                      "name": "create2Eip1167Proxy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22444,
                      "src": "2206:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (address,uint256) returns (address)"
                      }
                    },
                    "id": 18006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:32:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2184:54:47"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18012,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17973,
                        "src": "2290:4:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18013,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17975,
                        "src": "2296:6:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18014,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17979,
                        "src": "2304:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18015,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17981,
                        "src": "2311:5:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 18016,
                        "name": "initialSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 17977,
                        "src": "2318:13:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_contract$_IERC20_$38235",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 18009,
                            "name": "distributor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18002,
                            "src": "2266:11:47",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 18008,
                          "name": "IInitializableFDT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18361,
                          "src": "2248:17:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IInitializableFDT_$18361_$",
                            "typeString": "type(contract IInitializableFDT)"
                          }
                        },
                        "id": 18010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2248:30:47",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IInitializableFDT_$18361",
                          "typeString": "contract IInitializableFDT"
                        }
                      },
                      "id": 18011,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18360,
                      "src": "2248:41:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_contract$_IERC20_$38235_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (string memory,string memory,contract IERC20,address,uint256) external"
                      }
                    },
                    "id": 18017,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2248:84:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18018,
                  "nodeType": "ExpressionStatement",
                  "src": "2248:84:47"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18020,
                        "name": "distributor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18002,
                        "src": "2368:11:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18021,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "2381:3:47",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 18022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2381:10:47",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 18019,
                      "name": "DeployedDistributor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 17904,
                      "src": "2348:19:47",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 18023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2348:44:47",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18024,
                  "nodeType": "EmitStatement",
                  "src": "2343:49:47"
                }
              ]
            },
            "documentation": null,
            "id": 18026,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "createFDT",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 17986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 17973,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1838:20:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17972,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1838:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17975,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1868:22:47",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 17974,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1868:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17977,
                  "mutability": "mutable",
                  "name": "initialSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1900:21:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1900:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17979,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1931:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$38235",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 17978,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 38235,
                    "src": "1931:6:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$38235",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17981,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1953:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17983,
                  "mutability": "mutable",
                  "name": "logic",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1976:13:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 17982,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1976:7:47",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 17985,
                  "mutability": "mutable",
                  "name": "salt",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 18026,
                  "src": "1999:12:47",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 17984,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1999:7:47",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1828:189:47"
            },
            "returnParameters": {
              "id": 17987,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2039:0:47"
            },
            "scope": 18027,
            "src": "1810:589:47",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 18028,
        "src": "662:1739:47"
      }
    ],
    "src": "41:2361:47"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {
        "0x82f3582e365923e3007601a66bd8388dec15b8f9ee46cd2e527c4e28fbe9847c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "name": "DeployedDistributor",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x624d86d9Ce658c1564c81ac496BD73dDBdCeD2a4",
      "transactionHash": "0xdbaa1b3cdf2ff67925ca502ce241eae80eca04144ab66c6bbaa09be60a53aed5"
    },
    "5": {
      "events": {
        "0x82f3582e365923e3007601a66bd8388dec15b8f9ee46cd2e527c4e28fbe9847c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "name": "DeployedDistributor",
          "type": "event"
        }
      },
      "links": {},
      "address": "0x9D820626EAbCD1Ec579fEAef294D94615565F4F3",
      "transactionHash": "0x0d9f07c6b47a786ee57208c094ac2b5cbe95b40873edc7cfc44130d19cc96ad6"
    },
    "1994": {
      "events": {
        "0x82f3582e365923e3007601a66bd8388dec15b8f9ee46cd2e527c4e28fbe9847c": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "distributor",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "name": "DeployedDistributor",
          "type": "event"
        },
        "0xc2c29c3f81ba655872ca88b28cde4cf13490e4c739b8da06ba28c0978590e6e0": {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "internalType": "address",
              "name": "proxy",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "address",
              "name": "logic",
              "type": "address"
            },
            {
              "indexed": false,
              "internalType": "uint256",
              "name": "salt",
              "type": "uint256"
            }
          ],
          "name": "NewEip1167Proxy",
          "type": "event"
        }
      },
      "links": {
        "VanillaFDTLogic": "0xEf68CD3581E6984Ce2A78e07560B1636Fb76A5F3",
        "SimpleRestrictedFDTLogic": "0xfC2451FF6D8CCda0dFD089Ab7F036898F0D33070"
      },
      "address": "0x366C32d57bd3435207bB46a5826d74FC3D853bdd",
      "transactionHash": "0x9bbe7ea518d6788e48bc012683abd2fa7f486882dad618e6bce95d7dcbfca298"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.066Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "createERC20Distributor(string,string,uint256,address,address,uint256)": {
        "details": "mints initial supply after deploying the tokenized distributor contract",
        "params": {
          "initialSupply": "of distributor tokens",
          "name": "name of the token",
          "symbol": "of the token"
        }
      }
    },
    "title": "FDTFactory",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "createERC20Distributor(string,string,uint256,address,address,uint256)": {
        "notice": "deploys a new tokenized distributor contract for a specified ERC20 token"
      }
    },
    "notice": "Factory for deploying FDT contracts",
    "version": 1
  }
}