{
  "contractName": "PosterRegistryProxy",
  "abi": [
    {
      "inputs": [
        {
          "name": "implementation",
          "type": "address"
        },
        {
          "name": "auth",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor",
      "signature": "constructor"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "setImplementation",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function",
      "signature": "0xd784d426"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokensContributed",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xd244ac32"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xfc0c546a"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0x61d027b3"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "a",
          "type": "address"
        }
      ],
      "name": "tokensRegisteredFor",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xa5988a6f"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "registerTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function",
      "signature": "0xcbb7a7c0"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "releaseTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function",
      "signature": "0x4b0babdd"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506040516040806105f48339810180604052604081101561003057600080fd5b50805160209091015160008054600160a060020a03928316600160a060020a03199182161790915560018054929093169116179055610580806100746000396000f3fe6080604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634b0babdd811461008757806361d027b3146100b3578063a5988a6f146100e4578063cbb7a7c014610129578063d244ac3214610153578063d784d42614610168578063fc0c546a1461019b575b600080fd5b34801561009357600080fd5b506100b1600480360360208110156100aa57600080fd5b50356101b0565b005b3480156100bf57600080fd5b506100c8610237565b60408051600160a060020a039092168252519081900360200190f35b3480156100f057600080fd5b506101176004803603602081101561010757600080fd5b5035600160a060020a03166102c6565b60408051918252519081900360200190f35b34801561013557600080fd5b506100b16004803603602081101561014c57600080fd5b5035610362565b34801561015f57600080fd5b506101176103ce565b34801561017457600080fd5b506100b16004803603602081101561018b57600080fd5b5035600160a060020a031661042c565b3480156101a757600080fd5b506100c86104f6565b600154604080517ff40d71f1000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169163f40d71f19160448082019260009290919082900301818387803b15801561021c57600080fd5b505af1158015610230573d6000803e3d6000fd5b5050505050565b600154604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916361d027b3916004808301926020929190829003018186803b15801561029557600080fd5b505afa1580156102a9573d6000803e3d6000fd5b505050506040513d60208110156102bf57600080fd5b5051905090565b600154604080517fa5988a6f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093929092169163a5988a6f91602480820192602092909190829003018186803b15801561033057600080fd5b505afa158015610344573d6000803e3d6000fd5b505050506040513d602081101561035a57600080fd5b505192915050565b600154604080517f89c966c5000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a03909216916389c966c59160448082019260009290919082900301818387803b15801561021c57600080fd5b600154604080517fd244ac320000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163d244ac32916004808301926020929190829003018186803b15801561029557600080fd5b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b15801561049057600080fd5b505afa1580156104a4573d6000803e3d6000fd5b505050506040513d60208110156104ba57600080fd5b505115156104c757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163fc0c546a916004808301926020929190829003018186803b15801561029557600080fdfea165627a7a723058206f95fa1a32c9de06d42b6af2b51e3057c87b6114add9f10c043909c2bec99dd30029",
  "deployedBytecode": "0x6080604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416634b0babdd811461008757806361d027b3146100b3578063a5988a6f146100e4578063cbb7a7c014610129578063d244ac3214610153578063d784d42614610168578063fc0c546a1461019b575b600080fd5b34801561009357600080fd5b506100b1600480360360208110156100aa57600080fd5b50356101b0565b005b3480156100bf57600080fd5b506100c8610237565b60408051600160a060020a039092168252519081900360200190f35b3480156100f057600080fd5b506101176004803603602081101561010757600080fd5b5035600160a060020a03166102c6565b60408051918252519081900360200190f35b34801561013557600080fd5b506100b16004803603602081101561014c57600080fd5b5035610362565b34801561015f57600080fd5b506101176103ce565b34801561017457600080fd5b506100b16004803603602081101561018b57600080fd5b5035600160a060020a031661042c565b3480156101a757600080fd5b506100c86104f6565b600154604080517ff40d71f1000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a039092169163f40d71f19160448082019260009290919082900301818387803b15801561021c57600080fd5b505af1158015610230573d6000803e3d6000fd5b5050505050565b600154604080517f61d027b30000000000000000000000000000000000000000000000000000000081529051600092600160a060020a0316916361d027b3916004808301926020929190829003018186803b15801561029557600080fd5b505afa1580156102a9573d6000803e3d6000fd5b505050506040513d60208110156102bf57600080fd5b5051905090565b600154604080517fa5988a6f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151600093929092169163a5988a6f91602480820192602092909190829003018186803b15801561033057600080fd5b505afa158015610344573d6000803e3d6000fd5b505050506040513d602081101561035a57600080fd5b505192915050565b600154604080517f89c966c5000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a03909216916389c966c59160448082019260009290919082900301818387803b15801561021c57600080fd5b600154604080517fd244ac320000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163d244ac32916004808301926020929190829003018186803b15801561029557600080fd5b600054604080517fced3fb9c0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163ced3fb9c91602480820192602092909190829003018186803b15801561049057600080fd5b505afa1580156104a4573d6000803e3d6000fd5b505050506040513d60208110156104ba57600080fd5b505115156104c757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154604080517ffc0c546a0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163fc0c546a916004808301926020929190829003018186803b15801561029557600080fdfea165627a7a723058206f95fa1a32c9de06d42b6af2b51e3057c87b6114add9f10c043909c2bec99dd30029",
  "sourceMap": "155:2910:4:-;;;657:135;8:9:-1;5:2;;;30:1;27;20:12;5:2;657:135:4;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;657:135:4;;;;;;;557:17:1;:67;;-1:-1:-1;;;;;557:67:1;;;-1:-1:-1;;;;;;557:67:1;;;;;;;;743:42:4;;;;;;;;;;;155:2910;;;;;;",
  "deployedSourceMap": "155:2910:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2959:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2959:104:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2959:104:4;;;;;1957:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1957:93:4;;;;;;;;-1:-1:-1;;;;;1957:93:4;;;;;;;;;;;;;;2344:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2344:122:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2344:122:4;-1:-1:-1;;;;;2344:122:4;;;;;;;;;;;;;;;;;;;2660:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2660:106:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2660:106:4;;;1413:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1413:108:4;;;;1068:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1068:130:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1068:130:4;-1:-1:-1;;;;;1068:130:4;;;1686:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1686:87:4;;;;2959:104;3014:8;;:42;;;;;;3037:10;3014:42;;;;;;;;;;;;-1:-1:-1;;;;;3014:8:4;;;;:22;;:42;;;;;:8;;:42;;;;;;;;:8;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;3014:42:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3014:42:4;;;;2959:104;:::o;1957:93::-;2024:8;;:19;;;;;;;;1998:7;;-1:-1:-1;;;;;2024:8:4;;:17;;:19;;;;;;;;;;;;;;:8;:19;;;5:2:-1;;;;30:1;27;20:12;5:2;2024:19:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2024:19:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2024:19:4;;-1:-1:-1;1957:93:4;:::o;2344:122::-;2428:8;;:31;;;;;;-1:-1:-1;;;;;2428:31:4;;;;;;;;;2405:4;;2428:8;;;;;:28;;:31;;;;;;;;;;;;;;;:8;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2428:31:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2428:31:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2428:31:4;;2344:122;-1:-1:-1;;2344:122:4:o;2660:106::-;2716:8;;:43;;;;;;2740:10;2716:43;;;;;;;;;;;;-1:-1:-1;;;;;2716:8:4;;;;:23;;:43;;;;;:8;;:43;;;;;;;;:8;;:43;;;5:2:-1;;;;30:1;27;20:12;1413:108:4;1486:8;;:28;;;;;;;;1463:4;;-1:-1:-1;;;;;1486:8:4;;:26;;:28;;;;;;;;;;;;;;:8;:28;;;5:2:-1;;;;30:1;27;20:12;1068:130:4;770:17:1;;:49;;;;;;808:10;770:49;;;;;;-1:-1:-1;;;;;770:17:1;;;;:37;;:49;;;;;;;;;;;;;;;:17;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;770:49:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;770:49:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;770:49:1;762:58;;;;;;;;1149:8:4;:42;;-1:-1:-1;;1149:42:4;-1:-1:-1;;;;;1149:42:4;;;;;;;;;;1068:130::o;1686:87::-;1750:8;;:16;;;;;;;;1724:7;;-1:-1:-1;;;;;1750:8:4;;:14;;:16;;;;;;;;;;;;;;:8;:16;;;5:2:-1;;;;30:1;27;20:12",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../poster/IPosterRegistry.sol\";\nimport \"../base/Authorizable.sol\";\n\n/** @title PosterRegistryProxy\n    @author Freydal\n*/\ncontract PosterRegistryProxy is Authorizable {\n\n    IPosterRegistry registry;\n\n    /** @dev Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n        @notice Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n        @param implementation deployed implementation of PosterRegistry.\n        @param auth AuthorizedAddresses deployed address.\n    */\n    constructor(address implementation, address auth) Authorizable(auth) public {\n        registry = IPosterRegistry(implementation);\n    }\n\n    /** @dev Set a new PosterRegistry implementation if a replacement is deployed.\n        @notice Set a new PosterRegistry implementation if a replacement is deployed.\n        @param implementation Deployed address for replacement PosterRegistry implementation.\n    */\n    function setImplementation(address implementation) isAuthorized public {\n        registry = IPosterRegistry(implementation);\n    }\n\n    /** @dev Reads the current registries tokensContributed.\n        @notice Reads the current registries tokensContributed.\n        @return Total number of tokens contributed the the current registry.\n    */\n    function tokensContributed() public view returns (uint) {\n        return registry.tokensContributed();\n    }\n\n    /** @dev Reads the current registries token.\n        @notice Reads the current registries token.\n        @return Address of configured ERC20 token.\n    */\n    function token() public view returns (address) {\n        return registry.token();\n    }\n\n    /** @dev Reads the current registries Treasury address.\n        @notice Reads the current registries Treasury address.\n        @return Address of configured treasury.\n    */\n    function treasury() public view returns (address) {\n        return registry.treasury();\n    }\n\n    /** @dev Reads the current registries tokens registered for the supplied address.\n        @notice Reads the current registries tokens registered for the supplied address.\n        @param a Address of user\n        @return The current number of tokens contributed by the address.\n    */\n    function tokensRegisteredFor(address a) public view returns (uint) {\n        return registry.tokensRegisteredFor(a);\n    }\n\n    /** @dev Calls registerTokens on the current registry.\n        @notice Calls registerTokens on the current registry.\n        @param amount Desired amount of tokens to register.\n    */\n    function registerTokens(uint amount) external {\n        registry.registerTokens(msg.sender, amount);\n    }\n\n    /** @dev Calls releaseTokens for the current registry.\n        @notice Calls releaseTokens for the current registry.\n        @param amount Desired amount of tokens to release.\n    */\n    function releaseTokens(uint amount) external {\n        registry.releaseTokens(msg.sender, amount);\n    }\n}\n\n\n\n",
  "sourcePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/external/PosterRegistryProxy.sol",
  "ast": {
    "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/external/PosterRegistryProxy.sol",
    "exportedSymbols": {
      "PosterRegistryProxy": [
        358
      ]
    },
    "id": 359,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 249,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/poster/IPosterRegistry.sol",
        "file": "../poster/IPosterRegistry.sol",
        "id": 250,
        "nodeType": "ImportDirective",
        "scope": 359,
        "sourceUnit": 809,
        "src": "25:39:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/base/Authorizable.sol",
        "file": "../base/Authorizable.sol",
        "id": 251,
        "nodeType": "ImportDirective",
        "scope": 359,
        "sourceUnit": 103,
        "src": "65:34:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 252,
              "name": "Authorizable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 102,
              "src": "187:12:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Authorizable_$102",
                "typeString": "contract Authorizable"
              }
            },
            "id": 253,
            "nodeType": "InheritanceSpecifier",
            "src": "187:12:4"
          }
        ],
        "contractDependencies": [
          102
        ],
        "contractKind": "contract",
        "documentation": "@title PosterRegistryProxy\n@author Freydal",
        "fullyImplemented": true,
        "id": 358,
        "linearizedBaseContracts": [
          358,
          102
        ],
        "name": "PosterRegistryProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 255,
            "name": "registry",
            "nodeType": "VariableDeclaration",
            "scope": 358,
            "src": "207:24:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPosterRegistry_$808",
              "typeString": "contract IPosterRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 254,
              "name": "IPosterRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 808,
              "src": "207:15:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                "typeString": "contract IPosterRegistry"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 271,
              "nodeType": "Block",
              "src": "733:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 265,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "743:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 267,
                          "name": "implementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 257,
                          "src": "770:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 266,
                        "name": "IPosterRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 808,
                        "src": "754:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IPosterRegistry_$808_$",
                          "typeString": "type(contract IPosterRegistry)"
                        }
                      },
                      "id": 268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "754:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "src": "743:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                      "typeString": "contract IPosterRegistry"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "743:42:4"
                }
              ]
            },
            "documentation": "@dev Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n@notice Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n@param implementation deployed implementation of PosterRegistry.\n@param auth AuthorizedAddresses deployed address.",
            "id": 272,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 262,
                    "name": "auth",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 259,
                    "src": "720:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 263,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 261,
                  "name": "Authorizable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 102,
                  "src": "707:12:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Authorizable_$102_$",
                    "typeString": "type(contract Authorizable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "707:18:4"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 257,
                  "name": "implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 272,
                  "src": "669:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "669:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 259,
                  "name": "auth",
                  "nodeType": "VariableDeclaration",
                  "scope": 272,
                  "src": "693:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "668:38:4"
            },
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "733:0:4"
            },
            "scope": 358,
            "src": "657:135:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "1139:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 279,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "1149:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 281,
                          "name": "implementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 274,
                          "src": "1176:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 280,
                        "name": "IPosterRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 808,
                        "src": "1160:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IPosterRegistry_$808_$",
                          "typeString": "type(contract IPosterRegistry)"
                        }
                      },
                      "id": 282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1160:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "src": "1149:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                      "typeString": "contract IPosterRegistry"
                    }
                  },
                  "id": 284,
                  "nodeType": "ExpressionStatement",
                  "src": "1149:42:4"
                }
              ]
            },
            "documentation": "@dev Set a new PosterRegistry implementation if a replacement is deployed.\n@notice Set a new PosterRegistry implementation if a replacement is deployed.\n@param implementation Deployed address for replacement PosterRegistry implementation.",
            "id": 286,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 276,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "1119:12:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1119:12:4"
              }
            ],
            "name": "setImplementation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 274,
                  "name": "implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "1095:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1095:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1094:24:4"
            },
            "returnParameters": {
              "id": 278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1139:0:4"
            },
            "scope": 358,
            "src": "1068:130:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 295,
              "nodeType": "Block",
              "src": "1469:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 291,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "1486:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokensContributed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 776,
                      "src": "1486:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1486:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 290,
                  "id": 294,
                  "nodeType": "Return",
                  "src": "1479:35:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries tokensContributed.\n@notice Reads the current registries tokensContributed.\n@return Total number of tokens contributed the the current registry.",
            "id": 296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensContributed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1439:2:4"
            },
            "returnParameters": {
              "id": 290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 289,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 296,
                  "src": "1463:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 288,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1463:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1462:6:4"
            },
            "scope": 358,
            "src": "1413:108:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 305,
              "nodeType": "Block",
              "src": "1733:40:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 301,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "1750:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 302,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 781,
                      "src": "1750:14:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1750:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 300,
                  "id": 304,
                  "nodeType": "Return",
                  "src": "1743:23:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries token.\n@notice Reads the current registries token.\n@return Address of configured ERC20 token.",
            "id": 306,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1700:2:4"
            },
            "returnParameters": {
              "id": 300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 299,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 306,
                  "src": "1724:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 298,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1724:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1723:9:4"
            },
            "scope": 358,
            "src": "1686:87:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 315,
              "nodeType": "Block",
              "src": "2007:43:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 311,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2024:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "treasury",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 786,
                      "src": "2024:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 310,
                  "id": 314,
                  "nodeType": "Return",
                  "src": "2017:26:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries Treasury address.\n@notice Reads the current registries Treasury address.\n@return Address of configured treasury.",
            "id": 316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "treasury",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1974:2:4"
            },
            "returnParameters": {
              "id": 310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 309,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1998:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 308,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1998:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1997:9:4"
            },
            "scope": 358,
            "src": "1957:93:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 328,
              "nodeType": "Block",
              "src": "2411:55:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 325,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 318,
                        "src": "2457:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 323,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2428:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 324,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokensRegisteredFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 793,
                      "src": "2428:28:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2428:31:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 322,
                  "id": 327,
                  "nodeType": "Return",
                  "src": "2421:38:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries tokens registered for the supplied address.\n@notice Reads the current registries tokens registered for the supplied address.\n@param a Address of user\n@return The current number of tokens contributed by the address.",
            "id": 329,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensRegisteredFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 318,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "2373:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2373:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2372:11:4"
            },
            "returnParameters": {
              "id": 322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 321,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "2405:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 320,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2404:6:4"
            },
            "scope": 358,
            "src": "2344:122:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 342,
              "nodeType": "Block",
              "src": "2706:60:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 337,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4569,
                          "src": "2740:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2740:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 339,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 331,
                        "src": "2752:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 334,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2716:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 800,
                      "src": "2716:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2716:43:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "2716:43:4"
                }
              ]
            },
            "documentation": "@dev Calls registerTokens on the current registry.\n@notice Calls registerTokens on the current registry.\n@param amount Desired amount of tokens to register.",
            "id": 343,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "registerTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 343,
                  "src": "2684:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 330,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:13:4"
            },
            "returnParameters": {
              "id": 333,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2706:0:4"
            },
            "scope": 358,
            "src": "2660:106:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 356,
              "nodeType": "Block",
              "src": "3004:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 351,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4569,
                          "src": "3037:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3037:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 353,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "3049:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 348,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "3014:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "releaseTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 807,
                      "src": "3014:22:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3014:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 355,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:42:4"
                }
              ]
            },
            "documentation": "@dev Calls releaseTokens for the current registry.\n@notice Calls releaseTokens for the current registry.\n@param amount Desired amount of tokens to release.",
            "id": 357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "releaseTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 357,
                  "src": "2982:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 344,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2982:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2981:13:4"
            },
            "returnParameters": {
              "id": 347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3004:0:4"
            },
            "scope": 358,
            "src": "2959:104:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 359,
        "src": "155:2910:4"
      }
    ],
    "src": "0:3069:4"
  },
  "legacyAST": {
    "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/external/PosterRegistryProxy.sol",
    "exportedSymbols": {
      "PosterRegistryProxy": [
        358
      ]
    },
    "id": 359,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 249,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:4"
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/poster/IPosterRegistry.sol",
        "file": "../poster/IPosterRegistry.sol",
        "id": 250,
        "nodeType": "ImportDirective",
        "scope": 359,
        "sourceUnit": 809,
        "src": "25:39:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/freydal/IdeaProjects/ParadigmContracts/internal/contracts/base/Authorizable.sol",
        "file": "../base/Authorizable.sol",
        "id": 251,
        "nodeType": "ImportDirective",
        "scope": 359,
        "sourceUnit": 103,
        "src": "65:34:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 252,
              "name": "Authorizable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 102,
              "src": "187:12:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Authorizable_$102",
                "typeString": "contract Authorizable"
              }
            },
            "id": 253,
            "nodeType": "InheritanceSpecifier",
            "src": "187:12:4"
          }
        ],
        "contractDependencies": [
          102
        ],
        "contractKind": "contract",
        "documentation": "@title PosterRegistryProxy\n@author Freydal",
        "fullyImplemented": true,
        "id": 358,
        "linearizedBaseContracts": [
          358,
          102
        ],
        "name": "PosterRegistryProxy",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 255,
            "name": "registry",
            "nodeType": "VariableDeclaration",
            "scope": 358,
            "src": "207:24:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IPosterRegistry_$808",
              "typeString": "contract IPosterRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 254,
              "name": "IPosterRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 808,
              "src": "207:15:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                "typeString": "contract IPosterRegistry"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 271,
              "nodeType": "Block",
              "src": "733:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 269,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 265,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "743:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 267,
                          "name": "implementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 257,
                          "src": "770:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 266,
                        "name": "IPosterRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 808,
                        "src": "754:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IPosterRegistry_$808_$",
                          "typeString": "type(contract IPosterRegistry)"
                        }
                      },
                      "id": 268,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "754:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "src": "743:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                      "typeString": "contract IPosterRegistry"
                    }
                  },
                  "id": 270,
                  "nodeType": "ExpressionStatement",
                  "src": "743:42:4"
                }
              ]
            },
            "documentation": "@dev Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n@notice Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.\n@param implementation deployed implementation of PosterRegistry.\n@param auth AuthorizedAddresses deployed address.",
            "id": 272,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 262,
                    "name": "auth",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 259,
                    "src": "720:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 263,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 261,
                  "name": "Authorizable",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 102,
                  "src": "707:12:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_Authorizable_$102_$",
                    "typeString": "type(contract Authorizable)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "707:18:4"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 260,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 257,
                  "name": "implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 272,
                  "src": "669:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "669:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 259,
                  "name": "auth",
                  "nodeType": "VariableDeclaration",
                  "scope": 272,
                  "src": "693:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "668:38:4"
            },
            "returnParameters": {
              "id": 264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "733:0:4"
            },
            "scope": 358,
            "src": "657:135:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 285,
              "nodeType": "Block",
              "src": "1139:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 279,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 255,
                      "src": "1149:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 281,
                          "name": "implementation",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 274,
                          "src": "1176:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 280,
                        "name": "IPosterRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 808,
                        "src": "1160:15:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IPosterRegistry_$808_$",
                          "typeString": "type(contract IPosterRegistry)"
                        }
                      },
                      "id": 282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1160:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                        "typeString": "contract IPosterRegistry"
                      }
                    },
                    "src": "1149:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                      "typeString": "contract IPosterRegistry"
                    }
                  },
                  "id": 284,
                  "nodeType": "ExpressionStatement",
                  "src": "1149:42:4"
                }
              ]
            },
            "documentation": "@dev Set a new PosterRegistry implementation if a replacement is deployed.\n@notice Set a new PosterRegistry implementation if a replacement is deployed.\n@param implementation Deployed address for replacement PosterRegistry implementation.",
            "id": 286,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 277,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 276,
                  "name": "isAuthorized",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 101,
                  "src": "1119:12:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1119:12:4"
              }
            ],
            "name": "setImplementation",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 275,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 274,
                  "name": "implementation",
                  "nodeType": "VariableDeclaration",
                  "scope": 286,
                  "src": "1095:22:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1095:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1094:24:4"
            },
            "returnParameters": {
              "id": 278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1139:0:4"
            },
            "scope": 358,
            "src": "1068:130:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 295,
              "nodeType": "Block",
              "src": "1469:52:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 291,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "1486:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 292,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokensContributed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 776,
                      "src": "1486:26:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1486:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 290,
                  "id": 294,
                  "nodeType": "Return",
                  "src": "1479:35:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries tokensContributed.\n@notice Reads the current registries tokensContributed.\n@return Total number of tokens contributed the the current registry.",
            "id": 296,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensContributed",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1439:2:4"
            },
            "returnParameters": {
              "id": 290,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 289,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 296,
                  "src": "1463:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 288,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1463:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1462:6:4"
            },
            "scope": 358,
            "src": "1413:108:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 305,
              "nodeType": "Block",
              "src": "1733:40:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 301,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "1750:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 302,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "token",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 781,
                      "src": "1750:14:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1750:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 300,
                  "id": 304,
                  "nodeType": "Return",
                  "src": "1743:23:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries token.\n@notice Reads the current registries token.\n@return Address of configured ERC20 token.",
            "id": 306,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1700:2:4"
            },
            "returnParameters": {
              "id": 300,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 299,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 306,
                  "src": "1724:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 298,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1724:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1723:9:4"
            },
            "scope": 358,
            "src": "1686:87:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 315,
              "nodeType": "Block",
              "src": "2007:43:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 311,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2024:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 312,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "treasury",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 786,
                      "src": "2024:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                        "typeString": "function () view external returns (address)"
                      }
                    },
                    "id": 313,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2024:19:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 310,
                  "id": 314,
                  "nodeType": "Return",
                  "src": "2017:26:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries Treasury address.\n@notice Reads the current registries Treasury address.\n@return Address of configured treasury.",
            "id": 316,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "treasury",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 307,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1974:2:4"
            },
            "returnParameters": {
              "id": 310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 309,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 316,
                  "src": "1998:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 308,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1998:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1997:9:4"
            },
            "scope": 358,
            "src": "1957:93:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 328,
              "nodeType": "Block",
              "src": "2411:55:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 325,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 318,
                        "src": "2457:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 323,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2428:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 324,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "tokensRegisteredFor",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 793,
                      "src": "2428:28:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 326,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2428:31:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 322,
                  "id": 327,
                  "nodeType": "Return",
                  "src": "2421:38:4"
                }
              ]
            },
            "documentation": "@dev Reads the current registries tokens registered for the supplied address.\n@notice Reads the current registries tokens registered for the supplied address.\n@param a Address of user\n@return The current number of tokens contributed by the address.",
            "id": 329,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokensRegisteredFor",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 318,
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "2373:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2373:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2372:11:4"
            },
            "returnParameters": {
              "id": 322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 321,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "2405:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 320,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2405:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2404:6:4"
            },
            "scope": 358,
            "src": "2344:122:4",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 342,
              "nodeType": "Block",
              "src": "2706:60:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 337,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4569,
                          "src": "2740:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2740:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 339,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 331,
                        "src": "2752:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 334,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "2716:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 336,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "registerTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 800,
                      "src": "2716:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2716:43:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 341,
                  "nodeType": "ExpressionStatement",
                  "src": "2716:43:4"
                }
              ]
            },
            "documentation": "@dev Calls registerTokens on the current registry.\n@notice Calls registerTokens on the current registry.\n@param amount Desired amount of tokens to register.",
            "id": 343,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "registerTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 343,
                  "src": "2684:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 330,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2684:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2683:13:4"
            },
            "returnParameters": {
              "id": 333,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2706:0:4"
            },
            "scope": 358,
            "src": "2660:106:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 356,
              "nodeType": "Block",
              "src": "3004:59:4",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 351,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4569,
                          "src": "3037:3:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3037:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 353,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 345,
                        "src": "3049:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 348,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 255,
                        "src": "3014:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IPosterRegistry_$808",
                          "typeString": "contract IPosterRegistry"
                        }
                      },
                      "id": 350,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "releaseTokens",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 807,
                      "src": "3014:22:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 354,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3014:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 355,
                  "nodeType": "ExpressionStatement",
                  "src": "3014:42:4"
                }
              ]
            },
            "documentation": "@dev Calls releaseTokens for the current registry.\n@notice Calls releaseTokens for the current registry.\n@param amount Desired amount of tokens to release.",
            "id": 357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "releaseTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 346,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 345,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 357,
                  "src": "2982:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 344,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2982:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2981:13:4"
            },
            "returnParameters": {
              "id": 347,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3004:0:4"
            },
            "scope": 358,
            "src": "2959:104:4",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 359,
        "src": "155:2910:4"
      }
    ],
    "src": "0:3069:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.0+commit.1d4f565a.Emscripten.clang"
  },
  "networks": {
    "3": {
      "events": {},
      "links": {},
      "address": "0xBdd34B13Aff942b32C2660a11dA19Ff6E964724e",
      "transactionHash": "0xe16baa073e91d057323fade681d6f42a8a448f6aa5c9a10e1fd5299cae7be8da"
    },
    "6174": {
      "events": {},
      "links": {},
      "address": "0xe5DEd1997dAB5548467Ab390EaEa97764962a8bf",
      "transactionHash": "0xa1b6da7fe53f6d4ce12218bf232125101a05929271788a8c0b61429e7710f0ca"
    }
  },
  "schemaVersion": "3.0.2",
  "updatedAt": "2019-04-04T17:37:23.913Z",
  "devdoc": {
    "author": "Freydal",
    "methods": {
      "constructor": {
        "details": "Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.",
        "params": {
          "auth": "AuthorizedAddresses deployed address.",
          "implementation": "deployed implementation of PosterRegistry."
        }
      },
      "registerTokens(uint256)": {
        "details": "Calls registerTokens on the current registry.",
        "params": {
          "amount": "Desired amount of tokens to register."
        }
      },
      "releaseTokens(uint256)": {
        "details": "Calls releaseTokens for the current registry.",
        "params": {
          "amount": "Desired amount of tokens to release."
        }
      },
      "setImplementation(address)": {
        "details": "Set a new PosterRegistry implementation if a replacement is deployed.",
        "params": {
          "implementation": "Deployed address for replacement PosterRegistry implementation."
        }
      },
      "token()": {
        "details": "Reads the current registries token.",
        "return": "Address of configured ERC20 token."
      },
      "tokensContributed()": {
        "details": "Reads the current registries tokensContributed.",
        "return": "Total number of tokens contributed the the current registry."
      },
      "tokensRegisteredFor(address)": {
        "details": "Reads the current registries tokens registered for the supplied address.",
        "params": {
          "a": "Address of user"
        },
        "return": "The current number of tokens contributed by the address."
      },
      "treasury()": {
        "details": "Reads the current registries Treasury address.",
        "return": "Address of configured treasury."
      }
    },
    "title": "PosterRegistryProxy"
  },
  "userdoc": {
    "methods": {
      "constructor": "Creates a Proxy for a PosterRegistry. Accepts an initial implementation that can be overwritten if a replacement is deployed.",
      "registerTokens(uint256)": {
        "notice": "Calls registerTokens on the current registry."
      },
      "releaseTokens(uint256)": {
        "notice": "Calls releaseTokens for the current registry."
      },
      "setImplementation(address)": {
        "notice": "Set a new PosterRegistry implementation if a replacement is deployed."
      },
      "token()": {
        "notice": "Reads the current registries token."
      },
      "tokensContributed()": {
        "notice": "Reads the current registries tokensContributed."
      },
      "tokensRegisteredFor(address)": {
        "notice": "Reads the current registries tokens registered for the supplied address."
      },
      "treasury()": {
        "notice": "Reads the current registries Treasury address."
      }
    }
  }
}