{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "association",
          "type": "address"
        }
      ],
      "name": "SetAssociation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "association",
      "outputs": [
        {
          "internalType": "contract Association",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Association",
          "name": "someAssociation",
          "type": "address"
        }
      ],
      "name": "belongsTo",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user"
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "association()": {
        "details": "Returns the association"
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/License.sol",
    "exportedSymbols": {
      "Association": [
        4902
      ],
      "Context": [
        2404
      ],
      "ERC20": [
        690
      ],
      "FungibleLicense": [
        5132
      ],
      "IERC20": [
        768
      ],
      "IERC20Metadata": [
        793
      ],
      "Listing": [
        5373
      ],
      "Member": [
        5043
      ],
      "Ownable": [
        104
      ]
    },
    "id": 5133,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5045,
        "literals": [
          "solidity",
          "0.8",
          ".13"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:16"
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "id": 5046,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5133,
        "sourceUnit": 691,
        "src": "57:64:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/access/Ownable.sol",
        "file": "openzeppelin-contracts/contracts/access/Ownable.sol",
        "id": 5047,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5133,
        "sourceUnit": 105,
        "src": "122:61:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/Context.sol",
        "file": "openzeppelin-contracts/contracts/utils/Context.sol",
        "id": 5048,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5133,
        "sourceUnit": 2405,
        "src": "184:60:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Listing.sol",
        "file": "./Listing.sol",
        "id": 5049,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5133,
        "sourceUnit": 5374,
        "src": "245:23:16",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 5050,
              "name": "Member",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5043,
              "src": "398:6:16"
            },
            "id": 5051,
            "nodeType": "InheritanceSpecifier",
            "src": "398:6:16"
          },
          {
            "baseName": {
              "id": 5052,
              "name": "ERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 690,
              "src": "406:5:16"
            },
            "id": 5053,
            "nodeType": "InheritanceSpecifier",
            "src": "406:5:16"
          }
        ],
        "canonicalName": "FungibleLicense",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 5132,
        "linearizedBaseContracts": [
          5132,
          690,
          793,
          768,
          5043,
          104,
          2404
        ],
        "name": "FungibleLicense",
        "nameLocation": "379:15:16",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 5067,
              "nodeType": "Block",
              "src": "490:34:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5063,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5055,
                        "src": "506:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5064,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5057,
                        "src": "510:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5062,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 507,
                      "src": "500:5:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 5065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "500:17:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5066,
                  "nodeType": "ExpressionStatement",
                  "src": "500:17:16"
                }
              ]
            },
            "functionSelector": "40c10f19",
            "id": 5068,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5060,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5059,
                  "name": "onlyOwnerOrAssociation",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4952,
                  "src": "467:22:16"
                },
                "nodeType": "ModifierInvocation",
                "src": "467:22:16"
              }
            ],
            "name": "mint",
            "nameLocation": "427:4:16",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5058,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5055,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "440:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5068,
                  "src": "432:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5054,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "432:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5057,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "452:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5068,
                  "src": "444:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5056,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "444:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "431:28:16"
            },
            "returnParameters": {
              "id": 5061,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "490:0:16"
            },
            "scope": 5132,
            "src": "418:106:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              228
            ],
            "body": {
              "id": 5090,
              "nodeType": "Block",
              "src": "673:71:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 5082,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "693:3:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5083,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "693:10:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5084,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5070,
                        "src": "705:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5085,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5072,
                        "src": "709:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5081,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 451,
                      "src": "683:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "683:33:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5087,
                  "nodeType": "ExpressionStatement",
                  "src": "683:33:16"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 5088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "733:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5080,
                  "id": 5089,
                  "nodeType": "Return",
                  "src": "726:11:16"
                }
              ]
            },
            "functionSelector": "a9059cbb",
            "id": 5091,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5077,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5076,
                  "name": "onlyOwnerOrAssociation",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4952,
                  "src": "623:22:16"
                },
                "nodeType": "ModifierInvocation",
                "src": "623:22:16"
              }
            ],
            "name": "transfer",
            "nameLocation": "539:8:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5075,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5074,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "608:5:16"
                }
              ],
              "src": "599:15:16"
            },
            "parameters": {
              "id": 5073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5070,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "556:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5091,
                  "src": "548:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5069,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "548:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5072,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "568:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5091,
                  "src": "560:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5071,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "560:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "547:28:16"
            },
            "returnParameters": {
              "id": 5080,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5079,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5091,
                  "src": "663:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5078,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "663:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "662:6:16"
            },
            "scope": 5132,
            "src": "530:214:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              304
            ],
            "body": {
              "id": 5114,
              "nodeType": "Block",
              "src": "905:65:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5107,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5093,
                        "src": "925:4:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5108,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5095,
                        "src": "931:2:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5109,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5097,
                        "src": "935:6:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5106,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 451,
                      "src": "915:9:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5110,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "915:27:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5111,
                  "nodeType": "ExpressionStatement",
                  "src": "915:27:16"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 5112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "959:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 5105,
                  "id": 5113,
                  "nodeType": "Return",
                  "src": "952:11:16"
                }
              ]
            },
            "functionSelector": "23b872dd",
            "id": 5115,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 5102,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 5101,
                  "name": "onlyOwnerOrAssociation",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4952,
                  "src": "867:22:16"
                },
                "nodeType": "ModifierInvocation",
                "src": "867:22:16"
              }
            ],
            "name": "transferFrom",
            "nameLocation": "759:12:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5100,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5099,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "860:5:16"
                }
              ],
              "src": "851:15:16"
            },
            "parameters": {
              "id": 5098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5093,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "789:4:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5115,
                  "src": "781:12:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5092,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "781:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5095,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "811:2:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5115,
                  "src": "803:10:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5094,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "803:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5097,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "831:6:16",
                  "nodeType": "VariableDeclaration",
                  "scope": 5115,
                  "src": "823:14:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "823:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "771:72:16"
            },
            "returnParameters": {
              "id": 5105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5104,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5115,
                  "src": "899:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5103,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "899:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "898:6:16"
            },
            "scope": 5132,
            "src": "750:220:16",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              271
            ],
            "body": {
              "id": 5130,
              "nodeType": "Block",
              "src": "1090:57:16",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "4c6963656e73653a20617070726f7665206e6f7420737570706f72746564",
                        "id": 5127,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1107:32:16",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_46a1dd31361080da37b4a90c488c7eeb48ca63db6eda2a59be2f8c8032024300",
                          "typeString": "literal_string \"License: approve not supported\""
                        },
                        "value": "License: approve not supported"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_46a1dd31361080da37b4a90c488c7eeb48ca63db6eda2a59be2f8c8032024300",
                          "typeString": "literal_string \"License: approve not supported\""
                        }
                      ],
                      "id": 5126,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "1100:6:16",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 5128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1100:40:16",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5129,
                  "nodeType": "ExpressionStatement",
                  "src": "1100:40:16"
                }
              ]
            },
            "functionSelector": "095ea7b3",
            "id": 5131,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "985:7:16",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5122,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 5121,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "1056:5:16"
                }
              ],
              "src": "1047:15:16"
            },
            "parameters": {
              "id": 5120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5117,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5131,
                  "src": "993:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5116,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "993:7:16",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5119,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5131,
                  "src": "1002:7:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5118,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1002:7:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "992:18:16"
            },
            "returnParameters": {
              "id": 5125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5124,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5131,
                  "src": "1080:4:16",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5123,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:4:16",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1079:6:16"
            },
            "scope": 5132,
            "src": "976:171:16",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5133,
        "src": "361:788:16",
        "usedErrors": []
      }
    ],
    "src": "32:1118:16"
  }
}