{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "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": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "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"
    }
  ],
  "allSourcePaths": {
    "13": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/ERC20.sol",
    "14": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/IERC20.sol",
    "15": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/extensions/IERC20Metadata.sol",
    "23": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/utils/Context.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/ERC20.sol",
    "exportedSymbols": {
      "Context": [
        16878
      ],
      "ERC20": [
        14870
      ],
      "IERC20": [
        16856
      ],
      "IERC20Metadata": [
        12510
      ]
    },
    "id": 14871,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14285,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "105:23:13"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/IERC20.sol",
        "file": "./IERC20.sol",
        "id": 14286,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14871,
        "sourceUnit": 16857,
        "src": "130:22:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "file": "./extensions/IERC20Metadata.sol",
        "id": 14287,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14871,
        "sourceUnit": 12511,
        "src": "153:41:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/utils/Context.sol",
        "file": "../../utils/Context.sol",
        "id": 14288,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14871,
        "sourceUnit": 16879,
        "src": "195:33:13",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 14290,
              "name": "Context",
              "nameLocations": [
                "1419:7:13"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16878,
              "src": "1419:7:13"
            },
            "id": 14291,
            "nodeType": "InheritanceSpecifier",
            "src": "1419:7:13"
          },
          {
            "baseName": {
              "id": 14292,
              "name": "IERC20",
              "nameLocations": [
                "1428:6:13"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 16856,
              "src": "1428:6:13"
            },
            "id": 14293,
            "nodeType": "InheritanceSpecifier",
            "src": "1428:6:13"
          },
          {
            "baseName": {
              "id": 14294,
              "name": "IERC20Metadata",
              "nameLocations": [
                "1436:14:13"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 12510,
              "src": "1436:14:13"
            },
            "id": 14295,
            "nodeType": "InheritanceSpecifier",
            "src": "1436:14:13"
          }
        ],
        "canonicalName": "ERC20",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 14289,
          "nodeType": "StructuredDocumentation",
          "src": "230:1170:13",
          "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC20\n applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
        },
        "fullyImplemented": true,
        "id": 14870,
        "linearizedBaseContracts": [
          14870,
          12510,
          16856,
          16878
        ],
        "name": "ERC20",
        "nameLocation": "1410:5:13",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 14299,
            "mutability": "mutable",
            "name": "_balances",
            "nameLocation": "1493:9:13",
            "nodeType": "VariableDeclaration",
            "scope": 14870,
            "src": "1457:45:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 14298,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 14296,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1465:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1457:27:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 14297,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1476:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 14305,
            "mutability": "mutable",
            "name": "_allowances",
            "nameLocation": "1565:11:13",
            "nodeType": "VariableDeclaration",
            "scope": 14870,
            "src": "1509:67:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 14304,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 14300,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1517:7:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1509:47:13",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 14303,
                "keyName": "",
                "keyNameLocation": "-1:-1:-1",
                "keyType": {
                  "id": 14301,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1536:7:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1528:27:13",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 14302,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1547:7:13",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 14307,
            "mutability": "mutable",
            "name": "_totalSupply",
            "nameLocation": "1599:12:13",
            "nodeType": "VariableDeclaration",
            "scope": 14870,
            "src": "1583:28:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 14306,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1583:7:13",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 14309,
            "mutability": "mutable",
            "name": "_name",
            "nameLocation": "1633:5:13",
            "nodeType": "VariableDeclaration",
            "scope": 14870,
            "src": "1618:20:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 14308,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1618:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 14311,
            "mutability": "mutable",
            "name": "_symbol",
            "nameLocation": "1659:7:13",
            "nodeType": "VariableDeclaration",
            "scope": 14870,
            "src": "1644:22:13",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 14310,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1644:6:13",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 14327,
              "nodeType": "Block",
              "src": "2032:57:13",
              "statements": [
                {
                  "expression": {
                    "id": 14321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14319,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14309,
                      "src": "2042:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14320,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14314,
                      "src": "2050:5:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2042:13:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 14322,
                  "nodeType": "ExpressionStatement",
                  "src": "2042:13:13"
                },
                {
                  "expression": {
                    "id": 14325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14323,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14311,
                      "src": "2065:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14324,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14316,
                      "src": "2075:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2065:17:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 14326,
                  "nodeType": "ExpressionStatement",
                  "src": "2065:17:13"
                }
              ]
            },
            "documentation": {
              "id": 14312,
              "nodeType": "StructuredDocumentation",
              "src": "1673:298:13",
              "text": " @dev Sets the values for {name} and {symbol}.\n The default value of {decimals} is 18. To select a different value for\n {decimals} you should overload it.\n All two of these values are immutable: they can only be set once during\n construction."
            },
            "id": 14328,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14317,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14314,
                  "mutability": "mutable",
                  "name": "name_",
                  "nameLocation": "2002:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14328,
                  "src": "1988:19:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14313,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1988:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14316,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nameLocation": "2023:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14328,
                  "src": "2009:21:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14315,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2009:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1987:44:13"
            },
            "returnParameters": {
              "id": 14318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2032:0:13"
            },
            "scope": 14870,
            "src": "1976:113:13",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12497
            ],
            "body": {
              "id": 14337,
              "nodeType": "Block",
              "src": "2223:29:13",
              "statements": [
                {
                  "expression": {
                    "id": 14335,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14309,
                    "src": "2240:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 14334,
                  "id": 14336,
                  "nodeType": "Return",
                  "src": "2233:12:13"
                }
              ]
            },
            "documentation": {
              "id": 14329,
              "nodeType": "StructuredDocumentation",
              "src": "2095:54:13",
              "text": " @dev Returns the name of the token."
            },
            "functionSelector": "06fdde03",
            "id": 14338,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "2163:4:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14331,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2190:8:13"
            },
            "parameters": {
              "id": 14330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2167:2:13"
            },
            "returnParameters": {
              "id": 14334,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14333,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14338,
                  "src": "2208:13:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14332,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2208:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2207:15:13"
            },
            "scope": 14870,
            "src": "2154:98:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12503
            ],
            "body": {
              "id": 14347,
              "nodeType": "Block",
              "src": "2436:31:13",
              "statements": [
                {
                  "expression": {
                    "id": 14345,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14311,
                    "src": "2453:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 14344,
                  "id": 14346,
                  "nodeType": "Return",
                  "src": "2446:14:13"
                }
              ]
            },
            "documentation": {
              "id": 14339,
              "nodeType": "StructuredDocumentation",
              "src": "2258:102:13",
              "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
            },
            "functionSelector": "95d89b41",
            "id": 14348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "2374:6:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14341,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2403:8:13"
            },
            "parameters": {
              "id": 14340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2380:2:13"
            },
            "returnParameters": {
              "id": 14344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14343,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14348,
                  "src": "2421:13:13",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 14342,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2421:6:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2420:15:13"
            },
            "scope": 14870,
            "src": "2365:102:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12509
            ],
            "body": {
              "id": 14357,
              "nodeType": "Block",
              "src": "3156:26:13",
              "statements": [
                {
                  "expression": {
                    "hexValue": "3138",
                    "id": 14355,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3173:2:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "18"
                  },
                  "functionReturnParameters": 14354,
                  "id": 14356,
                  "nodeType": "Return",
                  "src": "3166:9:13"
                }
              ]
            },
            "documentation": {
              "id": 14349,
              "nodeType": "StructuredDocumentation",
              "src": "2473:613:13",
              "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless this function is\n overridden;\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "functionSelector": "313ce567",
            "id": 14358,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nameLocation": "3100:8:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14351,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3131:8:13"
            },
            "parameters": {
              "id": 14350,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3108:2:13"
            },
            "returnParameters": {
              "id": 14354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14353,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14358,
                  "src": "3149:5:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 14352,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3149:5:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3148:7:13"
            },
            "scope": 14870,
            "src": "3091:91:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16805
            ],
            "body": {
              "id": 14367,
              "nodeType": "Block",
              "src": "3312:36:13",
              "statements": [
                {
                  "expression": {
                    "id": 14365,
                    "name": "_totalSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14307,
                    "src": "3329:12:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14364,
                  "id": 14366,
                  "nodeType": "Return",
                  "src": "3322:19:13"
                }
              ]
            },
            "documentation": {
              "id": 14359,
              "nodeType": "StructuredDocumentation",
              "src": "3188:49:13",
              "text": " @dev See {IERC20-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "id": 14368,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "3251:11:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14361,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3285:8:13"
            },
            "parameters": {
              "id": 14360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3262:2:13"
            },
            "returnParameters": {
              "id": 14364,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14363,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14368,
                  "src": "3303:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3303:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3302:9:13"
            },
            "scope": 14870,
            "src": "3242:106:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16813
            ],
            "body": {
              "id": 14381,
              "nodeType": "Block",
              "src": "3489:42:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 14377,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14299,
                      "src": "3506:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 14379,
                    "indexExpression": {
                      "id": 14378,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14371,
                      "src": "3516:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3506:18:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14376,
                  "id": 14380,
                  "nodeType": "Return",
                  "src": "3499:25:13"
                }
              ]
            },
            "documentation": {
              "id": 14369,
              "nodeType": "StructuredDocumentation",
              "src": "3354:47:13",
              "text": " @dev See {IERC20-balanceOf}."
            },
            "functionSelector": "70a08231",
            "id": 14382,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "3415:9:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14373,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3462:8:13"
            },
            "parameters": {
              "id": 14372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14371,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3433:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14382,
                  "src": "3425:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14370,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3425:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3424:17:13"
            },
            "returnParameters": {
              "id": 14376,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14375,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14382,
                  "src": "3480:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3480:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3479:9:13"
            },
            "scope": 14870,
            "src": "3406:125:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16823
            ],
            "body": {
              "id": 14406,
              "nodeType": "Block",
              "src": "3812:104:13",
              "statements": [
                {
                  "assignments": [
                    14394
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14394,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "3830:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14406,
                      "src": "3822:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14393,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3822:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14397,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14395,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16868,
                      "src": "3838:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14396,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3838:12:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3822:28:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14399,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14394,
                        "src": "3870:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14400,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14385,
                        "src": "3877:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14401,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14387,
                        "src": "3881:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14398,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14630,
                      "src": "3860:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3860:28:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14403,
                  "nodeType": "ExpressionStatement",
                  "src": "3860:28:13"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 14404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3905:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14392,
                  "id": 14405,
                  "nodeType": "Return",
                  "src": "3898:11:13"
                }
              ]
            },
            "documentation": {
              "id": 14383,
              "nodeType": "StructuredDocumentation",
              "src": "3537:185:13",
              "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
            },
            "functionSelector": "a9059cbb",
            "id": 14407,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nameLocation": "3736:8:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14389,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3788:8:13"
            },
            "parameters": {
              "id": 14388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14385,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "3753:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14407,
                  "src": "3745:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14384,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3745:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14387,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3765:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14407,
                  "src": "3757:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14386,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3757:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3744:28:13"
            },
            "returnParameters": {
              "id": 14392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14391,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14407,
                  "src": "3806:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14390,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3806:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3805:6:13"
            },
            "scope": 14870,
            "src": "3727:189:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16833
            ],
            "body": {
              "id": 14424,
              "nodeType": "Block",
              "src": "4072:51:13",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 14418,
                        "name": "_allowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14305,
                        "src": "4089:11:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 14420,
                      "indexExpression": {
                        "id": 14419,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14410,
                        "src": "4101:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "4089:18:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 14422,
                    "indexExpression": {
                      "id": 14421,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14412,
                      "src": "4108:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4089:27:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 14417,
                  "id": 14423,
                  "nodeType": "Return",
                  "src": "4082:34:13"
                }
              ]
            },
            "documentation": {
              "id": 14408,
              "nodeType": "StructuredDocumentation",
              "src": "3922:47:13",
              "text": " @dev See {IERC20-allowance}."
            },
            "functionSelector": "dd62ed3e",
            "id": 14425,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "3983:9:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14414,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4045:8:13"
            },
            "parameters": {
              "id": 14413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14410,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "4001:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14425,
                  "src": "3993:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3993:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14412,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "4016:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14425,
                  "src": "4008:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14411,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4008:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3992:32:13"
            },
            "returnParameters": {
              "id": 14417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14416,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14425,
                  "src": "4063:7:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14415,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4063:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4062:9:13"
            },
            "scope": 14870,
            "src": "3974:149:13",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16843
            ],
            "body": {
              "id": 14449,
              "nodeType": "Block",
              "src": "4520:108:13",
              "statements": [
                {
                  "assignments": [
                    14437
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14437,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "4538:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14449,
                      "src": "4530:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14436,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "4530:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14440,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14438,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16868,
                      "src": "4546:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4546:12:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4530:28:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14442,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14437,
                        "src": "4577:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14443,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14428,
                        "src": "4584:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14444,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14430,
                        "src": "4593:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14441,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14804,
                      "src": "4568:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4568:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14446,
                  "nodeType": "ExpressionStatement",
                  "src": "4568:32:13"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 14447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4617:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14435,
                  "id": 14448,
                  "nodeType": "Return",
                  "src": "4610:11:13"
                }
              ]
            },
            "documentation": {
              "id": 14426,
              "nodeType": "StructuredDocumentation",
              "src": "4129:297:13",
              "text": " @dev See {IERC20-approve}.\n NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address."
            },
            "functionSelector": "095ea7b3",
            "id": 14450,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "4440:7:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14432,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4496:8:13"
            },
            "parameters": {
              "id": 14431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14428,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "4456:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14450,
                  "src": "4448:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14427,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4448:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14430,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4473:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14450,
                  "src": "4465:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4465:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4447:33:13"
            },
            "returnParameters": {
              "id": 14435,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14434,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14450,
                  "src": "4514:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14433,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4514:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4513:6:13"
            },
            "scope": 14870,
            "src": "4431:197:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              16855
            ],
            "body": {
              "id": 14482,
              "nodeType": "Block",
              "src": "5323:153:13",
              "statements": [
                {
                  "assignments": [
                    14464
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14464,
                      "mutability": "mutable",
                      "name": "spender",
                      "nameLocation": "5341:7:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14482,
                      "src": "5333:15:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14463,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5333:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14467,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14465,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16868,
                      "src": "5351:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5351:12:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5333:30:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14469,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14453,
                        "src": "5389:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14470,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14464,
                        "src": "5395:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14471,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14457,
                        "src": "5404:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14468,
                      "name": "_spendAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14847,
                      "src": "5373:15:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5373:38:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14473,
                  "nodeType": "ExpressionStatement",
                  "src": "5373:38:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14475,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14453,
                        "src": "5431:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14476,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14455,
                        "src": "5437:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14477,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14457,
                        "src": "5441:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14474,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14630,
                      "src": "5421:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5421:27:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14479,
                  "nodeType": "ExpressionStatement",
                  "src": "5421:27:13"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 14480,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5465:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14462,
                  "id": 14481,
                  "nodeType": "Return",
                  "src": "5458:11:13"
                }
              ]
            },
            "documentation": {
              "id": 14451,
              "nodeType": "StructuredDocumentation",
              "src": "4634:551:13",
              "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`.\n - the caller must have allowance for ``from``'s tokens of at least\n `amount`."
            },
            "functionSelector": "23b872dd",
            "id": 14483,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "5199:12:13",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14459,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5299:8:13"
            },
            "parameters": {
              "id": 14458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14453,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "5229:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14483,
                  "src": "5221:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5221:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14455,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "5251:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14483,
                  "src": "5243:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5243:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14457,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5271:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14483,
                  "src": "5263:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14456,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5263:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5211:72:13"
            },
            "returnParameters": {
              "id": 14462,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14461,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14483,
                  "src": "5317:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14460,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5317:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5316:6:13"
            },
            "scope": 14870,
            "src": "5190:286:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14511,
              "nodeType": "Block",
              "src": "5965:140:13",
              "statements": [
                {
                  "assignments": [
                    14494
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14494,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "5983:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14511,
                      "src": "5975:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14493,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5975:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14497,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14495,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16868,
                      "src": "5991:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5991:12:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5975:28:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14499,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14494,
                        "src": "6022:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14500,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14486,
                        "src": "6029:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 14502,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14494,
                              "src": "6048:5:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14503,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14486,
                              "src": "6055:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 14501,
                            "name": "allowance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14425,
                            "src": "6038:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address,address) view returns (uint256)"
                            }
                          },
                          "id": 14504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6038:25:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "id": 14505,
                          "name": "addedValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14488,
                          "src": "6066:10:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6038:38:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14498,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14804,
                      "src": "6013:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6013:64:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14508,
                  "nodeType": "ExpressionStatement",
                  "src": "6013:64:13"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 14509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6094:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14492,
                  "id": 14510,
                  "nodeType": "Return",
                  "src": "6087:11:13"
                }
              ]
            },
            "documentation": {
              "id": 14484,
              "nodeType": "StructuredDocumentation",
              "src": "5482:384:13",
              "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
            },
            "functionSelector": "39509351",
            "id": 14512,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseAllowance",
            "nameLocation": "5880:17:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14486,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "5906:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14512,
                  "src": "5898:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5898:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14488,
                  "mutability": "mutable",
                  "name": "addedValue",
                  "nameLocation": "5923:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14512,
                  "src": "5915:18:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14487,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5915:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5897:37:13"
            },
            "returnParameters": {
              "id": 14492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14491,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14512,
                  "src": "5959:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14490,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5959:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5958:6:13"
            },
            "scope": 14870,
            "src": "5871:234:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14552,
              "nodeType": "Block",
              "src": "6691:328:13",
              "statements": [
                {
                  "assignments": [
                    14523
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14523,
                      "mutability": "mutable",
                      "name": "owner",
                      "nameLocation": "6709:5:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14552,
                      "src": "6701:13:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14522,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6701:7:13",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14526,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 14524,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16868,
                      "src": "6717:10:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 14525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6717:12:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6701:28:13"
                },
                {
                  "assignments": [
                    14528
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14528,
                      "mutability": "mutable",
                      "name": "currentAllowance",
                      "nameLocation": "6747:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14552,
                      "src": "6739:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14527,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6739:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14533,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 14530,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14523,
                        "src": "6776:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14531,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14515,
                        "src": "6783:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14529,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14425,
                      "src": "6766:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 14532,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6766:25:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6739:52:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14537,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14535,
                          "name": "currentAllowance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14528,
                          "src": "6809:16:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 14536,
                          "name": "subtractedValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14517,
                          "src": "6829:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6809:35:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                        "id": 14538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6846:39:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                          "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                        },
                        "value": "ERC20: decreased allowance below zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                          "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                        }
                      ],
                      "id": 14534,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6801:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14539,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6801:85:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14540,
                  "nodeType": "ExpressionStatement",
                  "src": "6801:85:13"
                },
                {
                  "id": 14549,
                  "nodeType": "UncheckedBlock",
                  "src": "6896:95:13",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 14542,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14523,
                            "src": "6929:5:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 14543,
                            "name": "spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14515,
                            "src": "6936:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14544,
                              "name": "currentAllowance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14528,
                              "src": "6945:16:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 14545,
                              "name": "subtractedValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14517,
                              "src": "6964:15:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6945:34:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 14541,
                          "name": "_approve",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14804,
                          "src": "6920:8:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 14547,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6920:60:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 14548,
                      "nodeType": "ExpressionStatement",
                      "src": "6920:60:13"
                    }
                  ]
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 14550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "7008:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 14521,
                  "id": 14551,
                  "nodeType": "Return",
                  "src": "7001:11:13"
                }
              ]
            },
            "documentation": {
              "id": 14513,
              "nodeType": "StructuredDocumentation",
              "src": "6111:476:13",
              "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
            },
            "functionSelector": "a457c2d7",
            "id": 14553,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decreaseAllowance",
            "nameLocation": "6601:17:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14518,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14515,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "6627:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14553,
                  "src": "6619:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14514,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6619:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14517,
                  "mutability": "mutable",
                  "name": "subtractedValue",
                  "nameLocation": "6644:15:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14553,
                  "src": "6636:23:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14516,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6636:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6618:42:13"
            },
            "returnParameters": {
              "id": 14521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14520,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14553,
                  "src": "6685:4:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 14519,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6685:4:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6684:6:13"
            },
            "scope": 14870,
            "src": "6592:427:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 14629,
              "nodeType": "Block",
              "src": "7581:710:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14569,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14564,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14556,
                          "src": "7599:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7615:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7607:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14565,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7607:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14568,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7607:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7599:18:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                        "id": 14570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7619:39:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        },
                        "value": "ERC20: transfer from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        }
                      ],
                      "id": 14563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7591:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7591:68:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14572,
                  "nodeType": "ExpressionStatement",
                  "src": "7591:68:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14574,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14558,
                          "src": "7677:2:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14577,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7691:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14576,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7683:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14575,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7683:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7683:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7677:16:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 14580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7695:37:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        },
                        "value": "ERC20: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        }
                      ],
                      "id": 14573,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7669:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14581,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7669:64:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14582,
                  "nodeType": "ExpressionStatement",
                  "src": "7669:64:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14584,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14556,
                        "src": "7765:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14585,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14558,
                        "src": "7771:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14586,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14560,
                        "src": "7775:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14583,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14858,
                      "src": "7744:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14587,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7744:38:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14588,
                  "nodeType": "ExpressionStatement",
                  "src": "7744:38:13"
                },
                {
                  "assignments": [
                    14590
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14590,
                      "mutability": "mutable",
                      "name": "fromBalance",
                      "nameLocation": "7801:11:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14629,
                      "src": "7793:19:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14589,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7793:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14594,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14591,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14299,
                      "src": "7815:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 14593,
                    "indexExpression": {
                      "id": 14592,
                      "name": "from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14556,
                      "src": "7825:4:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7815:15:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7793:37:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14598,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14596,
                          "name": "fromBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14590,
                          "src": "7848:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 14597,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14560,
                          "src": "7863:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7848:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                        "id": 14599,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7871:40:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                        },
                        "value": "ERC20: transfer amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                          "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                        }
                      ],
                      "id": 14595,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7840:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7840:72:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14601,
                  "nodeType": "ExpressionStatement",
                  "src": "7840:72:13"
                },
                {
                  "id": 14616,
                  "nodeType": "UncheckedBlock",
                  "src": "7922:273:13",
                  "statements": [
                    {
                      "expression": {
                        "id": 14608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 14602,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14299,
                            "src": "7946:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 14604,
                          "indexExpression": {
                            "id": 14603,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14556,
                            "src": "7956:4:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "7946:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14607,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14605,
                            "name": "fromBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14590,
                            "src": "7964:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 14606,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14560,
                            "src": "7978:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7964:20:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7946:38:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14609,
                      "nodeType": "ExpressionStatement",
                      "src": "7946:38:13"
                    },
                    {
                      "expression": {
                        "id": 14614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 14610,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14299,
                            "src": "8161:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 14612,
                          "indexExpression": {
                            "id": 14611,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14558,
                            "src": "8171:2:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "8161:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 14613,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14560,
                          "src": "8178:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8161:23:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14615,
                      "nodeType": "ExpressionStatement",
                      "src": "8161:23:13"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 14618,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14556,
                        "src": "8219:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14619,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14558,
                        "src": "8225:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14620,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14560,
                        "src": "8229:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14617,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16790,
                      "src": "8210:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14621,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8210:26:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14622,
                  "nodeType": "EmitStatement",
                  "src": "8205:31:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14624,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14556,
                        "src": "8267:4:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14625,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14558,
                        "src": "8273:2:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14626,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14560,
                        "src": "8277:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14623,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14869,
                      "src": "8247:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14627,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8247:37:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14628,
                  "nodeType": "ExpressionStatement",
                  "src": "8247:37:13"
                }
              ]
            },
            "documentation": {
              "id": 14554,
              "nodeType": "StructuredDocumentation",
              "src": "7025:443:13",
              "text": " @dev Moves `amount` of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `from` must have a balance of at least `amount`."
            },
            "id": 14630,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nameLocation": "7482:9:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14556,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "7509:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14630,
                  "src": "7501:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14555,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7501:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14558,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "7531:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14630,
                  "src": "7523:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14557,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7523:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14560,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7551:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14630,
                  "src": "7543:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7543:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7491:72:13"
            },
            "returnParameters": {
              "id": 14562,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7581:0:13"
            },
            "scope": 14870,
            "src": "7473:818:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14686,
              "nodeType": "Block",
              "src": "8632:470:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14639,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14633,
                          "src": "8650:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14642,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8669:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14641,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8661:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14640,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "8661:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8661:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "8650:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 14645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8673:33:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        },
                        "value": "ERC20: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        }
                      ],
                      "id": 14638,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "8642:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8642:65:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14647,
                  "nodeType": "ExpressionStatement",
                  "src": "8642:65:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14651,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8747:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "8739:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14649,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "8739:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14652,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8739:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14653,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14633,
                        "src": "8751:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14654,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14635,
                        "src": "8760:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14648,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14858,
                      "src": "8718:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8718:49:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14656,
                  "nodeType": "ExpressionStatement",
                  "src": "8718:49:13"
                },
                {
                  "expression": {
                    "id": 14659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14657,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14307,
                      "src": "8778:12:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 14658,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14635,
                      "src": "8794:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8778:22:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14660,
                  "nodeType": "ExpressionStatement",
                  "src": "8778:22:13"
                },
                {
                  "id": 14667,
                  "nodeType": "UncheckedBlock",
                  "src": "8810:175:13",
                  "statements": [
                    {
                      "expression": {
                        "id": 14665,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 14661,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14299,
                            "src": "8946:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 14663,
                          "indexExpression": {
                            "id": 14662,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14633,
                            "src": "8956:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "8946:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 14664,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14635,
                          "src": "8968:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8946:28:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14666,
                      "nodeType": "ExpressionStatement",
                      "src": "8946:28:13"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9016:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9008:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14669,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9008:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14672,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9008:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14673,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14633,
                        "src": "9020:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14674,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14635,
                        "src": "9029:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14668,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16790,
                      "src": "8999:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14675,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8999:37:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14676,
                  "nodeType": "EmitStatement",
                  "src": "8994:42:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9075:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9067:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14678,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9067:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14681,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9067:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14682,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14633,
                        "src": "9079:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14683,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14635,
                        "src": "9088:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14677,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14869,
                      "src": "9047:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9047:48:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14685,
                  "nodeType": "ExpressionStatement",
                  "src": "9047:48:13"
                }
              ]
            },
            "documentation": {
              "id": 14631,
              "nodeType": "StructuredDocumentation",
              "src": "8297:265:13",
              "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `account` cannot be the zero address."
            },
            "id": 14687,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "8576:5:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14636,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14633,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "8590:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14687,
                  "src": "8582:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14632,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8582:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14635,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "8607:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14687,
                  "src": "8599:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14634,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8599:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8581:33:13"
            },
            "returnParameters": {
              "id": 14637,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8632:0:13"
            },
            "scope": 14870,
            "src": "8567:535:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14758,
              "nodeType": "Block",
              "src": "9487:594:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14696,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14690,
                          "src": "9505:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9524:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9516:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14697,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "9516:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9516:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9505:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                        "id": 14702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9528:35:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        },
                        "value": "ERC20: burn from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        }
                      ],
                      "id": 14695,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9497:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9497:67:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14704,
                  "nodeType": "ExpressionStatement",
                  "src": "9497:67:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14706,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14690,
                        "src": "9596:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14709,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9613:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9605:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14707,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9605:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14710,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9605:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14711,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14692,
                        "src": "9617:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14705,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14858,
                      "src": "9575:20:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9575:49:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14713,
                  "nodeType": "ExpressionStatement",
                  "src": "9575:49:13"
                },
                {
                  "assignments": [
                    14715
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14715,
                      "mutability": "mutable",
                      "name": "accountBalance",
                      "nameLocation": "9643:14:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14758,
                      "src": "9635:22:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14714,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9635:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14719,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14716,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14299,
                      "src": "9660:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 14718,
                    "indexExpression": {
                      "id": 14717,
                      "name": "account",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14690,
                      "src": "9670:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9660:18:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9635:43:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 14723,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14721,
                          "name": "accountBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14715,
                          "src": "9696:14:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 14722,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14692,
                          "src": "9714:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9696:24:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                        "id": 14724,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9722:36:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                          "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                        },
                        "value": "ERC20: burn amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                          "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                        }
                      ],
                      "id": 14720,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9688:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9688:71:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14726,
                  "nodeType": "ExpressionStatement",
                  "src": "9688:71:13"
                },
                {
                  "id": 14739,
                  "nodeType": "UncheckedBlock",
                  "src": "9769:194:13",
                  "statements": [
                    {
                      "expression": {
                        "id": 14733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 14727,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14299,
                            "src": "9793:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 14729,
                          "indexExpression": {
                            "id": 14728,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14690,
                            "src": "9803:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "9793:18:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 14732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 14730,
                            "name": "accountBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14715,
                            "src": "9814:14:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 14731,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14692,
                            "src": "9831:6:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9814:23:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9793:44:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14734,
                      "nodeType": "ExpressionStatement",
                      "src": "9793:44:13"
                    },
                    {
                      "expression": {
                        "id": 14737,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 14735,
                          "name": "_totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14307,
                          "src": "9930:12:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "id": 14736,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14692,
                          "src": "9946:6:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9930:22:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14738,
                      "nodeType": "ExpressionStatement",
                      "src": "9930:22:13"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 14741,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14690,
                        "src": "9987:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14744,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10004:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9996:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14742,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9996:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9996:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14746,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14692,
                        "src": "10008:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14740,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16790,
                      "src": "9978:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9978:37:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14748,
                  "nodeType": "EmitStatement",
                  "src": "9973:42:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14750,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14690,
                        "src": "10046:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 14753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10063:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 14752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "10055:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14751,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "10055:7:13",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10055:10:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14755,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14692,
                        "src": "10067:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14749,
                      "name": "_afterTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14869,
                      "src": "10026:19:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10026:48:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14757,
                  "nodeType": "ExpressionStatement",
                  "src": "10026:48:13"
                }
              ]
            },
            "documentation": {
              "id": 14688,
              "nodeType": "StructuredDocumentation",
              "src": "9108:309:13",
              "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
            },
            "id": 14759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "9431:5:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14693,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14690,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "9445:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14759,
                  "src": "9437:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14689,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9437:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14692,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "9462:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14759,
                  "src": "9454:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14691,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9454:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9436:33:13"
            },
            "returnParameters": {
              "id": 14694,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9487:0:13"
            },
            "scope": 14870,
            "src": "9422:659:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14803,
              "nodeType": "Block",
              "src": "10617:257:13",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14775,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14770,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14762,
                          "src": "10635:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10652:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10644:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14771,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10644:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14774,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10644:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10635:19:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                        "id": 14776,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10656:38:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        },
                        "value": "ERC20: approve from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        }
                      ],
                      "id": 14769,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10627:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10627:68:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14778,
                  "nodeType": "ExpressionStatement",
                  "src": "10627:68:13"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 14785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 14780,
                          "name": "spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14764,
                          "src": "10713:7:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 14783,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10732:1:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 14782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10724:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 14781,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10724:7:13",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 14784,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10724:10:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10713:21:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                        "id": 14786,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10736:36:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        },
                        "value": "ERC20: approve to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        }
                      ],
                      "id": 14779,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10705:7:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 14787,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10705:68:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14788,
                  "nodeType": "ExpressionStatement",
                  "src": "10705:68:13"
                },
                {
                  "expression": {
                    "id": 14795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 14789,
                          "name": "_allowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14305,
                          "src": "10784:11:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 14792,
                        "indexExpression": {
                          "id": 14790,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14762,
                          "src": "10796:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10784:18:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 14793,
                      "indexExpression": {
                        "id": 14791,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14764,
                        "src": "10803:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "10784:27:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14794,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14766,
                      "src": "10814:6:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10784:36:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14796,
                  "nodeType": "ExpressionStatement",
                  "src": "10784:36:13"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 14798,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14762,
                        "src": "10844:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14799,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14764,
                        "src": "10851:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14800,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14766,
                        "src": "10860:6:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14797,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16799,
                      "src": "10835:8:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 14801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10835:32:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14802,
                  "nodeType": "EmitStatement",
                  "src": "10830:37:13"
                }
              ]
            },
            "documentation": {
              "id": 14760,
              "nodeType": "StructuredDocumentation",
              "src": "10087:412:13",
              "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
            },
            "id": 14804,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "nameLocation": "10513:8:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14762,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "10539:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14804,
                  "src": "10531:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10531:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14764,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "10562:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14804,
                  "src": "10554:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14763,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10554:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14766,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10587:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14804,
                  "src": "10579:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14765,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10579:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10521:78:13"
            },
            "returnParameters": {
              "id": 14768,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10617:0:13"
            },
            "scope": 14870,
            "src": "10504:370:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14846,
              "nodeType": "Block",
              "src": "11275:321:13",
              "statements": [
                {
                  "assignments": [
                    14815
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14815,
                      "mutability": "mutable",
                      "name": "currentAllowance",
                      "nameLocation": "11293:16:13",
                      "nodeType": "VariableDeclaration",
                      "scope": 14846,
                      "src": "11285:24:13",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14814,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "11285:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14820,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 14817,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14807,
                        "src": "11322:5:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14818,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14809,
                        "src": "11329:7:13",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14816,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14425,
                      "src": "11312:9:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 14819,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11312:25:13",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11285:52:13"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 14827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 14821,
                      "name": "currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14815,
                      "src": "11351:16:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 14824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11376:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 14823,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11376:7:13",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 14822,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "11371:4:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 14825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11371:13:13",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 14826,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "11385:3:13",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "11371:17:13",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11351:37:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14845,
                  "nodeType": "IfStatement",
                  "src": "11347:243:13",
                  "trueBody": {
                    "id": 14844,
                    "nodeType": "Block",
                    "src": "11390:200:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14831,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 14829,
                                "name": "currentAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14815,
                                "src": "11412:16:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 14830,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14811,
                                "src": "11432:6:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11412:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "45524332303a20696e73756666696369656e7420616c6c6f77616e6365",
                              "id": 14832,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11440:31:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe",
                                "typeString": "literal_string \"ERC20: insufficient allowance\""
                              },
                              "value": "ERC20: insufficient allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b6607e091cba9325f958656d2b5e0622ab7dc0eac71a26ac788cb25bc19f4fe",
                                "typeString": "literal_string \"ERC20: insufficient allowance\""
                              }
                            ],
                            "id": 14828,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "11404:7:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 14833,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11404:68:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14834,
                        "nodeType": "ExpressionStatement",
                        "src": "11404:68:13"
                      },
                      {
                        "id": 14843,
                        "nodeType": "UncheckedBlock",
                        "src": "11486:94:13",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 14836,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14807,
                                  "src": "11523:5:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 14837,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14809,
                                  "src": "11530:7:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 14840,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 14838,
                                    "name": "currentAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14815,
                                    "src": "11539:16:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 14839,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14811,
                                    "src": "11558:6:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11539:25:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 14835,
                                "name": "_approve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14804,
                                "src": "11514:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 14841,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11514:51:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 14842,
                            "nodeType": "ExpressionStatement",
                            "src": "11514:51:13"
                          }
                        ]
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 14805,
              "nodeType": "StructuredDocumentation",
              "src": "10880:270:13",
              "text": " @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."
            },
            "id": 14847,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_spendAllowance",
            "nameLocation": "11164:15:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14812,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14807,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "11197:5:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "11189:13:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11189:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14809,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "11220:7:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "11212:15:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11212:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14811,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11245:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14847,
                  "src": "11237:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14810,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11237:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11179:78:13"
            },
            "returnParameters": {
              "id": 14813,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11275:0:13"
            },
            "scope": 14870,
            "src": "11155:441:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14857,
              "nodeType": "Block",
              "src": "12299:2:13",
              "statements": []
            },
            "documentation": {
              "id": 14848,
              "nodeType": "StructuredDocumentation",
              "src": "11602:573:13",
              "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 14858,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nameLocation": "12189:20:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14850,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "12227:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14858,
                  "src": "12219:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14849,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12219:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14852,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "12249:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14858,
                  "src": "12241:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12241:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14854,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12269:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14858,
                  "src": "12261:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12261:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12209:72:13"
            },
            "returnParameters": {
              "id": 14856,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12299:0:13"
            },
            "scope": 14870,
            "src": "12180:121:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 14868,
              "nodeType": "Block",
              "src": "13007:2:13",
              "statements": []
            },
            "documentation": {
              "id": 14859,
              "nodeType": "StructuredDocumentation",
              "src": "12307:577:13",
              "text": " @dev Hook that is called after any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n has been transferred to `to`.\n - when `from` is zero, `amount` tokens have been minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 14869,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_afterTokenTransfer",
            "nameLocation": "12898:19:13",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14866,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14861,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "12935:4:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14869,
                  "src": "12927:12:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12927:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14863,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "12957:2:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14869,
                  "src": "12949:10:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14862,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12949:7:13",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14865,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12977:6:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 14869,
                  "src": "12969:14:13",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 14864,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12969:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12917:72:13"
            },
            "returnParameters": {
              "id": 14867,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13007:0:13"
            },
            "scope": 14870,
            "src": "12889:120:13",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 14871,
        "src": "1401:11610:13",
        "usedErrors": []
      }
    ],
    "src": "105:12907:13"
  },
  "bytecode": "60806040523480156200001157600080fd5b5060405162000b4638038062000b4683398101604081905262000034916200011f565b600362000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61085280620002f46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220c05c4faf91ce19358d02389d2293118c7a5d74fecf85a9111d8752c2389a069964736f6c63430008130033",
  "bytecodeSha1": "5d7c53ac75579876ffbfb61e35f275d9402a5cc6",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.19+commit.7dd6d404"
  },
  "contractName": "ERC20",
  "coverageMap": {
    "branches": {
      "13": {
        "ERC20._approve": {
          "30": [
            10635,
            10654,
            true
          ],
          "31": [
            10713,
            10734,
            true
          ]
        },
        "ERC20._spendAllowance": {
          "32": [
            11351,
            11388,
            false
          ],
          "33": [
            11412,
            11438,
            true
          ]
        },
        "ERC20._transfer": {
          "34": [
            7599,
            7617,
            true
          ],
          "35": [
            7677,
            7693,
            true
          ],
          "36": [
            7848,
            7869,
            true
          ]
        },
        "ERC20.decreaseAllowance": {
          "29": [
            6809,
            6844,
            true
          ]
        }
      },
      "14": {},
      "15": {},
      "23": {}
    },
    "statements": {
      "13": {
        "ERC20._approve": {
          "16": [
            10627,
            10695
          ],
          "17": [
            10705,
            10773
          ],
          "18": [
            10784,
            10820
          ],
          "19": [
            10830,
            10867
          ]
        },
        "ERC20._spendAllowance": {
          "20": [
            11404,
            11472
          ],
          "21": [
            11514,
            11565
          ]
        },
        "ERC20._transfer": {
          "22": [
            7591,
            7659
          ],
          "23": [
            7669,
            7733
          ],
          "24": [
            7840,
            7912
          ],
          "25": [
            7946,
            7984
          ],
          "26": [
            8161,
            8184
          ],
          "27": [
            8205,
            8236
          ],
          "28": [
            8247,
            8284
          ]
        },
        "ERC20.allowance": {
          "15": [
            4082,
            4116
          ]
        },
        "ERC20.approve": {
          "5": [
            4568,
            4600
          ],
          "6": [
            4610,
            4621
          ]
        },
        "ERC20.balanceOf": {
          "2": [
            3499,
            3524
          ]
        },
        "ERC20.decimals": {
          "1": [
            3166,
            3175
          ]
        },
        "ERC20.decreaseAllowance": {
          "12": [
            6801,
            6886
          ],
          "13": [
            6920,
            6980
          ]
        },
        "ERC20.increaseAllowance": {
          "10": [
            6013,
            6077
          ]
        },
        "ERC20.name": {
          "3": [
            2233,
            2245
          ]
        },
        "ERC20.symbol": {
          "11": [
            2446,
            2460
          ]
        },
        "ERC20.totalSupply": {
          "0": [
            3322,
            3341
          ]
        },
        "ERC20.transfer": {
          "14": [
            3860,
            3888
          ]
        },
        "ERC20.transferFrom": {
          "7": [
            5373,
            5411
          ],
          "8": [
            5421,
            5448
          ],
          "9": [
            5458,
            5469
          ]
        }
      },
      "14": {},
      "15": {},
      "23": {
        "Context._msgSender": {
          "4": [
            712,
            729
          ]
        }
      }
    }
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.8.2/Context",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC20",
    "OpenZeppelin/openzeppelin-contracts@4.8.2/IERC20Metadata"
  ],
  "deployedBytecode": "608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069c565b60405180910390f35b6100df6100da366004610706565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610730565b61024c565b604051601281526020016100c3565b6100df610131366004610706565b610270565b6100f361014436600461076c565b6001600160a01b031660009081526020819052604090205490565b6100b6610292565b6100df610175366004610706565b6102a1565b6100df610188366004610706565b610321565b6100f361019b36600461078e565b61032f565b6060600380546101af906107c1565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c1565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b60003361024081858561035a565b60019150505b92915050565b60003361025a85828561047e565b6102658585856104f8565b506001949350505050565b600033610240818585610283838361032f565b61028d91906107fb565b61035a565b6060600480546101af906107c1565b600033816102af828661032f565b9050838110156103145760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610265828686840361035a565b6000336102408185856104f8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103bc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161030b565b6001600160a01b03821661041d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161030b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061048a848461032f565b905060001981146104f257818110156104e55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161030b565b6104f2848484840361035a565b50505050565b6001600160a01b03831661055c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161030b565b6001600160a01b0382166105be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161030b565b6001600160a01b038316600090815260208190526040902054818110156106365760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161030b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f2565b600060208083528351808285015260005b818110156106c9578581018301518582016040015282016106ad565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461070157600080fd5b919050565b6000806040838503121561071957600080fd5b610722836106ea565b946020939093013593505050565b60008060006060848603121561074557600080fd5b61074e846106ea565b925061075c602085016106ea565b9150604084013590509250925092565b60006020828403121561077e57600080fd5b610787826106ea565b9392505050565b600080604083850312156107a157600080fd5b6107aa836106ea565b91506107b8602084016106ea565b90509250929050565b600181811c908216806107d557607f821691505b6020821081036107f557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561024657634e487b7160e01b600052601160045260246000fdfea2646970667358221220c05c4faf91ce19358d02389d2293118c7a5d74fecf85a9111d8752c2389a069964736f6c63430008130033",
  "deployedSourceMap": "1401:11610:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4431:197;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:67;;1162:22;1144:41;;1132:2;1117:18;4431:197:13;1004:187:67;3242:106:13;3329:12;;3242:106;;;1342:25:67;;;1330:2;1315:18;3242:106:13;1196:177:67;5190:286:13;;;;;;:::i;:::-;;:::i;3091:91::-;;;3173:2;1853:36:67;;1841:2;1826:18;3091:91:13;1711:184:67;5871:234:13;;;;;;:::i;:::-;;:::i;3406:125::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3506:18:13;3480:7;3506:18;;;;;;;;;;;;3406:125;2365:102;;;:::i;6592:427::-;;;;;;:::i;:::-;;:::i;3727:189::-;;;;;;:::i;:::-;;:::i;3974:149::-;;;;;;:::i;:::-;;:::i;2154:98::-;2208:13;2240:5;2233:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2154:98;:::o;4431:197::-;4514:4;719:10:23;4568:32:13;719:10:23;4584:7:13;4593:6;4568:8;:32::i;:::-;4617:4;4610:11;;;4431:197;;;;;:::o;5190:286::-;5317:4;719:10:23;5373:38:13;5389:4;719:10:23;5404:6:13;5373:15;:38::i;:::-;5421:27;5431:4;5437:2;5441:6;5421:9;:27::i;:::-;-1:-1:-1;5465:4:13;;5190:286;-1:-1:-1;;;;5190:286:13:o;5871:234::-;5959:4;719:10:23;6013:64:13;719:10:23;6029:7:13;6066:10;6038:25;719:10:23;6029:7:13;6038:9;:25::i;:::-;:38;;;;:::i;:::-;6013:8;:64::i;2365:102::-;2421:13;2453:7;2446:14;;;;;:::i;6592:427::-;6685:4;719:10:23;6685:4:13;6766:25;719:10:23;6783:7:13;6766:9;:25::i;:::-;6739:52;;6829:15;6809:16;:35;;6801:85;;;;-1:-1:-1;;;6801:85:13;;3170:2:67;6801:85:13;;;3152:21:67;3209:2;3189:18;;;3182:30;3248:34;3228:18;;;3221:62;-1:-1:-1;;;3299:18:67;;;3292:35;3344:19;;6801:85:13;;;;;;;;;6920:60;6929:5;6936:7;6964:15;6945:16;:34;6920:8;:60::i;3727:189::-;3806:4;719:10:23;3860:28:13;719:10:23;3877:2:13;3881:6;3860:9;:28::i;3974:149::-;-1:-1:-1;;;;;4089:18:13;;;4063:7;4089:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3974:149::o;10504:370::-;-1:-1:-1;;;;;10635:19:13;;10627:68;;;;-1:-1:-1;;;10627:68:13;;3576:2:67;10627:68:13;;;3558:21:67;3615:2;3595:18;;;3588:30;3654:34;3634:18;;;3627:62;-1:-1:-1;;;3705:18:67;;;3698:34;3749:19;;10627:68:13;3374:400:67;10627:68:13;-1:-1:-1;;;;;10713:21:13;;10705:68;;;;-1:-1:-1;;;10705:68:13;;3981:2:67;10705:68:13;;;3963:21:67;4020:2;4000:18;;;3993:30;4059:34;4039:18;;;4032:62;-1:-1:-1;;;4110:18:67;;;4103:32;4152:19;;10705:68:13;3779:398:67;10705:68:13;-1:-1:-1;;;;;10784:18:13;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10835:32;;1342:25:67;;;10835:32:13;;1315:18:67;10835:32:13;;;;;;;10504:370;;;:::o;11155:441::-;11285:24;11312:25;11322:5;11329:7;11312:9;:25::i;:::-;11285:52;;-1:-1:-1;;11351:16:13;:37;11347:243;;11432:6;11412:16;:26;;11404:68;;;;-1:-1:-1;;;11404:68:13;;4384:2:67;11404:68:13;;;4366:21:67;4423:2;4403:18;;;4396:30;4462:31;4442:18;;;4435:59;4511:18;;11404:68:13;4182:353:67;11404:68:13;11514:51;11523:5;11530:7;11558:6;11539:16;:25;11514:8;:51::i;:::-;11275:321;11155:441;;;:::o;7473:818::-;-1:-1:-1;;;;;7599:18:13;;7591:68;;;;-1:-1:-1;;;7591:68:13;;4742:2:67;7591:68:13;;;4724:21:67;4781:2;4761:18;;;4754:30;4820:34;4800:18;;;4793:62;-1:-1:-1;;;4871:18:67;;;4864:35;4916:19;;7591:68:13;4540:401:67;7591:68:13;-1:-1:-1;;;;;7677:16:13;;7669:64;;;;-1:-1:-1;;;7669:64:13;;5148:2:67;7669:64:13;;;5130:21:67;5187:2;5167:18;;;5160:30;5226:34;5206:18;;;5199:62;-1:-1:-1;;;5277:18:67;;;5270:33;5320:19;;7669:64:13;4946:399:67;7669:64:13;-1:-1:-1;;;;;7815:15:13;;7793:19;7815:15;;;;;;;;;;;7848:21;;;;7840:72;;;;-1:-1:-1;;;7840:72:13;;5552:2:67;7840:72:13;;;5534:21:67;5591:2;5571:18;;;5564:30;5630:34;5610:18;;;5603:62;-1:-1:-1;;;5681:18:67;;;5674:36;5727:19;;7840:72:13;5350:402:67;7840:72:13;-1:-1:-1;;;;;7946:15:13;;;:9;:15;;;;;;;;;;;7964:20;;;7946:38;;8161:13;;;;;;;;;;:23;;;;;;8210:26;;1342:25:67;;;8161:13:13;;8210:26;;1315:18:67;8210:26:13;;;;;;;8247:37;12180:121;14:548:67;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:67;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:67:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:67:o;2091:260::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;:::-;2249:39;;2307:38;2341:2;2330:9;2326:18;2307:38;:::i;:::-;2297:48;;2091:260;;;;;:::o;2356:380::-;2435:1;2431:12;;;;2478;;;2499:61;;2553:4;2545:6;2541:17;2531:27;;2499:61;2606:2;2598:6;2595:14;2575:18;2572:38;2569:161;;2652:10;2647:3;2643:20;2640:1;2633:31;2687:4;2684:1;2677:15;2715:4;2712:1;2705:15;2569:161;;2356:380;;;:::o;2741:222::-;2806:9;;;2827:10;;;2824:133;;;2879:10;2874:3;2870:20;2867:1;2860:31;2914:4;2911:1;2904:15;2942:4;2939:1;2932:15",
  "language": "Solidity",
  "natspec": {
    "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.",
    "events": {
      "Approval(address,address,uint256)": {
        "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
      },
      "Transfer(address,address,uint256)": {
        "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
      }
    },
    "kind": "dev",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "constructor": {
        "details": "Sets the values for {name} and {symbol}. The default value of {decimals} is 18. To select a different value for {decimals} you should overload it. All two of these values are immutable: they can only be set once during construction."
      },
      "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."
      },
      "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`."
      }
    },
    "version": 1
  },
  "offset": [
    1401,
    13011
  ],
  "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x136 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x15F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x18D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x114 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x1A0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x69C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xDF PUSH2 0xDA CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x232 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x2 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x10F CALLDATASIZE PUSH1 0x4 PUSH2 0x730 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xC3 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x131 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x144 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0xB6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x2A1 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x188 CALLDATASIZE PUSH1 0x4 PUSH2 0x706 JUMP JUMPDEST PUSH2 0x321 JUMP JUMPDEST PUSH2 0xF3 PUSH2 0x19B CALLDATASIZE PUSH1 0x4 PUSH2 0x78E JUMP JUMPDEST PUSH2 0x32F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1DB SWAP1 PUSH2 0x7C1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x228 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x228 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x20B JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x35A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x25A DUP6 DUP3 DUP6 PUSH2 0x47E JUMP JUMPDEST PUSH2 0x265 DUP6 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x283 DUP4 DUP4 PUSH2 0x32F JUMP JUMPDEST PUSH2 0x28D SWAP2 SWAP1 PUSH2 0x7FB JUMP JUMPDEST PUSH2 0x35A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x4 DUP1 SLOAD PUSH2 0x1AF SWAP1 PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x0 CALLER DUP2 PUSH2 0x2AF DUP3 DUP7 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x314 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x207A65726F PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x265 DUP3 DUP7 DUP7 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x240 DUP2 DUP6 DUP6 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x3BC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP1 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464 PUSH1 0x44 DUP3 ADD MSTORE PUSH4 0x72657373 PUSH1 0xE0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x41D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20617070726F766520746F20746865207A65726F206164647265 PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x7373 PUSH1 0xF0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE SWAP1 MLOAD DUP5 DUP2 MSTORE PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A DUP5 DUP5 PUSH2 0x32F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 NOT DUP2 EQ PUSH2 0x4F2 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x4E5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x30B JUMP JUMPDEST PUSH2 0x4F2 DUP5 DUP5 DUP5 DUP5 SUB PUSH2 0x35A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x55C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E736665722066726F6D20746865207A65726F206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x6472657373 PUSH1 0xD8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5BE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x23 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220746F20746865207A65726F2061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH3 0x657373 PUSH1 0xE8 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x636 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45524332303A207472616E7366657220616D6F756E7420657863656564732062 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x616C616E6365 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x30B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP8 DUP8 SUB SWAP1 SSTORE SWAP4 DUP8 AND DUP1 DUP4 MSTORE SWAP2 DUP5 SWAP1 KECCAK256 DUP1 SLOAD DUP8 ADD SWAP1 SSTORE SWAP3 MLOAD DUP6 DUP2 MSTORE SWAP1 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x4F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 MSTORE DUP4 MLOAD DUP1 DUP3 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x6C9 JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x40 ADD MSTORE DUP3 ADD PUSH2 0x6AD JUMP JUMPDEST POP PUSH1 0x0 PUSH1 0x40 DUP3 DUP7 ADD ADD MSTORE PUSH1 0x40 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND DUP6 ADD ADD SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x701 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x719 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x722 DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x745 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x74E DUP5 PUSH2 0x6EA JUMP JUMPDEST SWAP3 POP PUSH2 0x75C PUSH1 0x20 DUP6 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x787 DUP3 PUSH2 0x6EA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x7A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7AA DUP4 PUSH2 0x6EA JUMP JUMPDEST SWAP2 POP PUSH2 0x7B8 PUSH1 0x20 DUP5 ADD PUSH2 0x6EA JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x7D5 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x7F5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x246 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 0x5C 0x4F 0xAF SWAP2 0xCE NOT CALLDATALOAD DUP14 MUL CODESIZE SWAP14 0x22 SWAP4 GT DUP13 PUSH27 0x5D74FECF85A9111D8752C2389A069964736F6C6343000813003300 ",
  "pcMap": {
    "0": {
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x80"
    },
    "2": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "4": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "5": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "CALLVALUE",
      "path": "13"
    },
    "6": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "7": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "ISZERO",
      "path": "13"
    },
    "8": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x10"
    },
    "11": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "12": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "14": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "15": {
      "dev": "Cannot send ether to nonpayable function",
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "REVERT",
      "path": "13"
    },
    "16": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "17": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "POP",
      "path": "13"
    },
    "18": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "20": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "21": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "LT",
      "path": "13"
    },
    "22": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xA9"
    },
    "25": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "26": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "28": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "CALLDATALOAD",
      "path": "13"
    },
    "29": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0xE0"
    },
    "31": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "SHR",
      "path": "13"
    },
    "32": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "33": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x39509351"
    },
    "38": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "GT",
      "path": "13"
    },
    "39": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x71"
    },
    "42": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "43": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "44": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x39509351"
    },
    "49": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "50": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x123"
    },
    "53": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "54": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "55": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x70A08231"
    },
    "60": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "61": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x136"
    },
    "64": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "65": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "66": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x95D89B41"
    },
    "71": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "72": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x15F"
    },
    "75": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "76": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "77": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0xA457C2D7"
    },
    "82": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "83": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x167"
    },
    "86": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "87": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "88": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0xA9059CBB"
    },
    "93": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "94": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x17A"
    },
    "97": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "98": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "99": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0xDD62ED3E"
    },
    "104": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "105": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x18D"
    },
    "108": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "109": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "111": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "112": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "REVERT",
      "path": "13"
    },
    "113": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "114": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "115": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x6FDDE03"
    },
    "120": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "121": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xAE"
    },
    "124": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "125": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "126": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x95EA7B3"
    },
    "131": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "132": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xCC"
    },
    "135": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "136": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "137": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x18160DDD"
    },
    "142": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "143": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xEF"
    },
    "146": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "147": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "148": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x23B872DD"
    },
    "153": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "154": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x101"
    },
    "157": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "158": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "159": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH4",
      "path": "13",
      "value": "0x313CE567"
    },
    "164": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "EQ",
      "path": "13"
    },
    "165": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x114"
    },
    "168": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "169": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "170": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "172": {
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "DUP1",
      "path": "13"
    },
    "173": {
      "first_revert": true,
      "fn": null,
      "offset": [
        1401,
        13011
      ],
      "op": "REVERT",
      "path": "13"
    },
    "174": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "175": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xB6"
    },
    "178": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x1A0"
    },
    "181": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMP",
      "path": "13"
    },
    "182": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "183": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "185": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "186": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xC3"
    },
    "189": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "190": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "191": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x69C"
    },
    "194": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMP",
      "path": "13"
    },
    "195": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "196": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "198": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "199": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "DUP1",
      "path": "13"
    },
    "200": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "201": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SUB",
      "path": "13"
    },
    "202": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "203": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "RETURN",
      "path": "13"
    },
    "204": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "205": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDF"
    },
    "208": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDA"
    },
    "211": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "212": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "214": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x706"
    },
    "217": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMP",
      "path": "13"
    },
    "218": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "219": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x232"
    },
    "222": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMP",
      "path": "13"
    },
    "223": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "224": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "226": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "227": {
      "op": "SWAP1"
    },
    "228": {
      "op": "ISZERO"
    },
    "229": {
      "op": "ISZERO"
    },
    "230": {
      "op": "DUP2"
    },
    "231": {
      "op": "MSTORE"
    },
    "232": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "234": {
      "op": "ADD"
    },
    "235": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xC3"
    },
    "238": {
      "op": "JUMP"
    },
    "239": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3242,
        3348
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "240": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3329,
        3341
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 0,
      "value": "0x2"
    },
    "242": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3329,
        3341
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "243": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3242,
        3348
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "244": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3242,
        3348
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "246": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3242,
        3348
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "247": {
      "op": "SWAP1"
    },
    "248": {
      "op": "DUP2"
    },
    "249": {
      "op": "MSTORE"
    },
    "250": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "252": {
      "op": "ADD"
    },
    "253": {
      "fn": "ERC20.totalSupply",
      "offset": [
        3242,
        3348
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xC3"
    },
    "256": {
      "op": "JUMP"
    },
    "257": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "258": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDF"
    },
    "261": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x10F"
    },
    "264": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "265": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "267": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x730"
    },
    "270": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMP",
      "path": "13"
    },
    "271": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "272": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x24C"
    },
    "275": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMP",
      "path": "13"
    },
    "276": {
      "fn": "ERC20.decimals",
      "offset": [
        3091,
        3182
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "277": {
      "fn": "ERC20.decimals",
      "offset": [
        3091,
        3182
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "279": {
      "fn": "ERC20.decimals",
      "offset": [
        3091,
        3182
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "280": {
      "fn": "ERC20.decimals",
      "offset": [
        3173,
        3175
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 1,
      "value": "0x12"
    },
    "282": {
      "op": "DUP2"
    },
    "283": {
      "op": "MSTORE"
    },
    "284": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "286": {
      "op": "ADD"
    },
    "287": {
      "fn": "ERC20.decimals",
      "offset": [
        3091,
        3182
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xC3"
    },
    "290": {
      "op": "JUMP"
    },
    "291": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "292": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDF"
    },
    "295": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x131"
    },
    "298": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "299": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "301": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x706"
    },
    "304": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        5871,
        6105
      ],
      "op": "JUMP",
      "path": "13"
    },
    "305": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "306": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x270"
    },
    "309": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        5871,
        6105
      ],
      "op": "JUMP",
      "path": "13"
    },
    "310": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "311": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xF3"
    },
    "314": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x144"
    },
    "317": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "318": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "320": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x76C"
    },
    "323": {
      "fn": "ERC20.balanceOf",
      "jump": "i",
      "offset": [
        3406,
        3531
      ],
      "op": "JUMP",
      "path": "13"
    },
    "324": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "325": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "327": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "329": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "331": {
      "op": "SHL"
    },
    "332": {
      "op": "SUB"
    },
    "333": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "AND",
      "path": "13",
      "statement": 2
    },
    "334": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3480,
        3487
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "336": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "337": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "DUP2",
      "path": "13"
    },
    "338": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "339": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "341": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "DUP2",
      "path": "13"
    },
    "342": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "343": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "344": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "346": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "347": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "348": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "349": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3506,
        3524
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "350": {
      "fn": "ERC20.balanceOf",
      "offset": [
        3406,
        3531
      ],
      "op": "JUMP",
      "path": "13"
    },
    "351": {
      "fn": "ERC20.symbol",
      "offset": [
        2365,
        2467
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "352": {
      "fn": "ERC20.symbol",
      "offset": [
        2365,
        2467
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xB6"
    },
    "355": {
      "fn": "ERC20.symbol",
      "offset": [
        2365,
        2467
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x292"
    },
    "358": {
      "fn": "ERC20.symbol",
      "jump": "i",
      "offset": [
        2365,
        2467
      ],
      "op": "JUMP",
      "path": "13"
    },
    "359": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "360": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDF"
    },
    "363": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x175"
    },
    "366": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "367": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "369": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x706"
    },
    "372": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6592,
        7019
      ],
      "op": "JUMP",
      "path": "13"
    },
    "373": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "374": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x2A1"
    },
    "377": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6592,
        7019
      ],
      "op": "JUMP",
      "path": "13"
    },
    "378": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "379": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xDF"
    },
    "382": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x188"
    },
    "385": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "386": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "388": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x706"
    },
    "391": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3727,
        3916
      ],
      "op": "JUMP",
      "path": "13"
    },
    "392": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "393": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x321"
    },
    "396": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3727,
        3916
      ],
      "op": "JUMP",
      "path": "13"
    },
    "397": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "398": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0xF3"
    },
    "401": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x19B"
    },
    "404": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "CALLDATASIZE",
      "path": "13"
    },
    "405": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "407": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x78E"
    },
    "410": {
      "fn": "ERC20.allowance",
      "jump": "i",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMP",
      "path": "13"
    },
    "411": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "412": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x32F"
    },
    "415": {
      "fn": "ERC20.allowance",
      "jump": "i",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMP",
      "path": "13"
    },
    "416": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "417": {
      "fn": "ERC20.name",
      "offset": [
        2208,
        2221
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x60"
    },
    "419": {
      "fn": "ERC20.name",
      "offset": [
        2240,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 3,
      "value": "0x3"
    },
    "421": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "422": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "423": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x1AF"
    },
    "426": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "427": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x7C1"
    },
    "430": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMP",
      "path": "13"
    },
    "431": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "432": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "433": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1F"
    },
    "435": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "436": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "438": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "439": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "440": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DIV",
      "path": "13"
    },
    "441": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MUL",
      "path": "13"
    },
    "442": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "444": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "445": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "447": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "448": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "449": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP2",
      "path": "13"
    },
    "450": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "451": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "453": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "454": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "455": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP3",
      "path": "13"
    },
    "456": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "457": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "458": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP2",
      "path": "13"
    },
    "459": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP2",
      "path": "13"
    },
    "460": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "461": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "463": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "464": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP3",
      "path": "13"
    },
    "465": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "466": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "467": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x1DB"
    },
    "470": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "471": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x7C1"
    },
    "474": {
      "fn": "ERC20.name",
      "jump": "i",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMP",
      "path": "13"
    },
    "475": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "476": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "477": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ISZERO",
      "path": "13"
    },
    "478": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x228"
    },
    "481": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "482": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "483": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1F"
    },
    "485": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "LT",
      "path": "13"
    },
    "486": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x1FD"
    },
    "489": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "490": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x100"
    },
    "493": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "494": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP4",
      "path": "13"
    },
    "495": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "496": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DIV",
      "path": "13"
    },
    "497": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MUL",
      "path": "13"
    },
    "498": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP4",
      "path": "13"
    },
    "499": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "500": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "501": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "503": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "504": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "505": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x228"
    },
    "508": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMP",
      "path": "13"
    },
    "509": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "510": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP3",
      "path": "13"
    },
    "511": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "512": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "513": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "514": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "516": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "517": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "519": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "521": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "522": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "523": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "524": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP2",
      "path": "13"
    },
    "525": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "526": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP2",
      "path": "13"
    },
    "527": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "528": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "529": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1"
    },
    "531": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "532": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "533": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "535": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "536": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP1",
      "path": "13"
    },
    "537": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP4",
      "path": "13"
    },
    "538": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "GT",
      "path": "13"
    },
    "539": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x20B"
    },
    "542": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "543": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP3",
      "path": "13"
    },
    "544": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "545": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SUB",
      "path": "13"
    },
    "546": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1F"
    },
    "548": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "AND",
      "path": "13"
    },
    "549": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "DUP3",
      "path": "13"
    },
    "550": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "ADD",
      "path": "13"
    },
    "551": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "552": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "553": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "554": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "555": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "556": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "557": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "558": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "559": {
      "fn": "ERC20.name",
      "offset": [
        2233,
        2245
      ],
      "op": "POP",
      "path": "13"
    },
    "560": {
      "fn": "ERC20.name",
      "offset": [
        2154,
        2252
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "561": {
      "fn": "ERC20.name",
      "jump": "o",
      "offset": [
        2154,
        2252
      ],
      "op": "JUMP",
      "path": "13"
    },
    "562": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "563": {
      "fn": "ERC20.approve",
      "offset": [
        4514,
        4518
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "565": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "23",
      "statement": 4
    },
    "566": {
      "fn": "ERC20.approve",
      "offset": [
        4568,
        4600
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 5,
      "value": "0x240"
    },
    "569": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "23"
    },
    "570": {
      "fn": "ERC20.approve",
      "offset": [
        4584,
        4591
      ],
      "op": "DUP6",
      "path": "13"
    },
    "571": {
      "fn": "ERC20.approve",
      "offset": [
        4593,
        4599
      ],
      "op": "DUP6",
      "path": "13"
    },
    "572": {
      "fn": "ERC20.approve",
      "offset": [
        4568,
        4576
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x35A"
    },
    "575": {
      "fn": "ERC20.approve",
      "jump": "i",
      "offset": [
        4568,
        4600
      ],
      "op": "JUMP",
      "path": "13"
    },
    "576": {
      "fn": "ERC20.approve",
      "offset": [
        4568,
        4600
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "577": {
      "fn": "ERC20.approve",
      "offset": [
        4617,
        4621
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 6,
      "value": "0x1"
    },
    "579": {
      "fn": "ERC20.approve",
      "offset": [
        4610,
        4621
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "580": {
      "fn": "ERC20.approve",
      "offset": [
        4610,
        4621
      ],
      "op": "POP",
      "path": "13"
    },
    "581": {
      "fn": "ERC20.approve",
      "offset": [
        4610,
        4621
      ],
      "op": "POP",
      "path": "13"
    },
    "582": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "583": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "SWAP3",
      "path": "13"
    },
    "584": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "585": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "POP",
      "path": "13"
    },
    "586": {
      "fn": "ERC20.approve",
      "offset": [
        4431,
        4628
      ],
      "op": "POP",
      "path": "13"
    },
    "587": {
      "fn": "ERC20.approve",
      "jump": "o",
      "offset": [
        4431,
        4628
      ],
      "op": "JUMP",
      "path": "13"
    },
    "588": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "589": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5317,
        5321
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "591": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "23"
    },
    "592": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5373,
        5411
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 7,
      "value": "0x25A"
    },
    "595": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5389,
        5393
      ],
      "op": "DUP6",
      "path": "13"
    },
    "596": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP3",
      "path": "23"
    },
    "597": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5404,
        5410
      ],
      "op": "DUP6",
      "path": "13"
    },
    "598": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5373,
        5388
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x47E"
    },
    "601": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5373,
        5411
      ],
      "op": "JUMP",
      "path": "13"
    },
    "602": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5373,
        5411
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "603": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5421,
        5448
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 8,
      "value": "0x265"
    },
    "606": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5431,
        5435
      ],
      "op": "DUP6",
      "path": "13"
    },
    "607": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5437,
        5439
      ],
      "op": "DUP6",
      "path": "13"
    },
    "608": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5441,
        5447
      ],
      "op": "DUP6",
      "path": "13"
    },
    "609": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5421,
        5430
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x4F8"
    },
    "612": {
      "fn": "ERC20.transferFrom",
      "jump": "i",
      "offset": [
        5421,
        5448
      ],
      "op": "JUMP",
      "path": "13"
    },
    "613": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5421,
        5448
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "614": {
      "op": "POP"
    },
    "615": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5465,
        5469
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 9,
      "value": "0x1"
    },
    "617": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5465,
        5469
      ],
      "op": "SWAP5",
      "path": "13"
    },
    "618": {
      "fn": "ERC20.transferFrom",
      "offset": [
        5190,
        5476
      ],
      "op": "SWAP4",
      "path": "13"
    },
    "619": {
      "op": "POP"
    },
    "620": {
      "op": "POP"
    },
    "621": {
      "op": "POP"
    },
    "622": {
      "op": "POP"
    },
    "623": {
      "fn": "ERC20.transferFrom",
      "jump": "o",
      "offset": [
        5190,
        5476
      ],
      "op": "JUMP",
      "path": "13"
    },
    "624": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5871,
        6105
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "625": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        5959,
        5963
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "627": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "23"
    },
    "628": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6013,
        6077
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 10,
      "value": "0x240"
    },
    "631": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "23"
    },
    "632": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6029,
        6036
      ],
      "op": "DUP6",
      "path": "13"
    },
    "633": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6066,
        6076
      ],
      "op": "DUP6",
      "path": "13"
    },
    "634": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6063
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x283"
    },
    "637": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP4",
      "path": "23"
    },
    "638": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6029,
        6036
      ],
      "op": "DUP4",
      "path": "13"
    },
    "639": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6047
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x32F"
    },
    "642": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6038,
        6063
      ],
      "op": "JUMP",
      "path": "13"
    },
    "643": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6063
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "644": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6076
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x28D"
    },
    "647": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6076
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "648": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6076
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "649": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6076
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x7FB"
    },
    "652": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6038,
        6076
      ],
      "op": "JUMP",
      "path": "13"
    },
    "653": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6038,
        6076
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "654": {
      "fn": "ERC20.increaseAllowance",
      "offset": [
        6013,
        6021
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x35A"
    },
    "657": {
      "fn": "ERC20.increaseAllowance",
      "jump": "i",
      "offset": [
        6013,
        6077
      ],
      "op": "JUMP",
      "path": "13"
    },
    "658": {
      "fn": "ERC20.symbol",
      "offset": [
        2365,
        2467
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "659": {
      "fn": "ERC20.symbol",
      "offset": [
        2421,
        2434
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x60"
    },
    "661": {
      "fn": "ERC20.symbol",
      "offset": [
        2453,
        2460
      ],
      "op": "PUSH1",
      "path": "13",
      "statement": 11,
      "value": "0x4"
    },
    "663": {
      "fn": "ERC20.symbol",
      "offset": [
        2446,
        2460
      ],
      "op": "DUP1",
      "path": "13"
    },
    "664": {
      "fn": "ERC20.symbol",
      "offset": [
        2446,
        2460
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "665": {
      "fn": "ERC20.symbol",
      "offset": [
        2446,
        2460
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x1AF"
    },
    "668": {
      "fn": "ERC20.symbol",
      "offset": [
        2446,
        2460
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "669": {
      "fn": "ERC20.symbol",
      "offset": [
        2446,
        2460
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x7C1"
    },
    "672": {
      "fn": "ERC20.symbol",
      "jump": "i",
      "offset": [
        2446,
        2460
      ],
      "op": "JUMP",
      "path": "13"
    },
    "673": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6592,
        7019
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "674": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6685,
        6689
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "676": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "23"
    },
    "677": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6685,
        6689
      ],
      "op": "DUP2",
      "path": "13"
    },
    "678": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6766,
        6791
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x2AF"
    },
    "681": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP3",
      "path": "23"
    },
    "682": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6783,
        6790
      ],
      "op": "DUP7",
      "path": "13"
    },
    "683": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6766,
        6775
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x32F"
    },
    "686": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6766,
        6791
      ],
      "op": "JUMP",
      "path": "13"
    },
    "687": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6766,
        6791
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "688": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6739,
        6791
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "689": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6739,
        6791
      ],
      "op": "POP",
      "path": "13"
    },
    "690": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6829,
        6844
      ],
      "op": "DUP4",
      "path": "13",
      "statement": 12
    },
    "691": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6809,
        6825
      ],
      "op": "DUP2",
      "path": "13"
    },
    "692": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6809,
        6844
      ],
      "op": "LT",
      "path": "13"
    },
    "693": {
      "branch": 29,
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6809,
        6844
      ],
      "op": "ISZERO",
      "path": "13"
    },
    "694": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x314"
    },
    "697": {
      "branch": 29,
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "698": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "700": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "701": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "705": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "707": {
      "op": "SHL"
    },
    "708": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "DUP2",
      "path": "13"
    },
    "709": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "710": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "712": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "714": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "DUP3",
      "path": "13"
    },
    "715": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "ADD",
      "path": "13"
    },
    "716": {
      "op": "MSTORE"
    },
    "717": {
      "op": "PUSH1",
      "value": "0x25"
    },
    "719": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "721": {
      "op": "DUP3"
    },
    "722": {
      "op": "ADD"
    },
    "723": {
      "op": "MSTORE"
    },
    "724": {
      "op": "PUSH32",
      "value": "0x45524332303A2064656372656173656420616C6C6F77616E63652062656C6F77"
    },
    "757": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "759": {
      "op": "DUP3"
    },
    "760": {
      "op": "ADD"
    },
    "761": {
      "op": "MSTORE"
    },
    "762": {
      "op": "PUSH5",
      "value": "0x207A65726F"
    },
    "768": {
      "op": "PUSH1",
      "value": "0xD8"
    },
    "770": {
      "op": "SHL"
    },
    "771": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "773": {
      "op": "DUP3"
    },
    "774": {
      "op": "ADD"
    },
    "775": {
      "op": "MSTORE"
    },
    "776": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "778": {
      "op": "ADD"
    },
    "779": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "780": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "782": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "783": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "DUP1",
      "path": "13"
    },
    "784": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "785": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "SUB",
      "path": "13"
    },
    "786": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "787": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "REVERT",
      "optimizer_revert": true,
      "path": "13"
    },
    "788": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6801,
        6886
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "789": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6920,
        6980
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 13,
      "value": "0x265"
    },
    "792": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6929,
        6934
      ],
      "op": "DUP3",
      "path": "13"
    },
    "793": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6936,
        6943
      ],
      "op": "DUP7",
      "path": "13"
    },
    "794": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6964,
        6979
      ],
      "op": "DUP7",
      "path": "13"
    },
    "795": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6945,
        6961
      ],
      "op": "DUP5",
      "path": "13"
    },
    "796": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6945,
        6979
      ],
      "op": "SUB",
      "path": "13"
    },
    "797": {
      "fn": "ERC20.decreaseAllowance",
      "offset": [
        6920,
        6928
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x35A"
    },
    "800": {
      "fn": "ERC20.decreaseAllowance",
      "jump": "i",
      "offset": [
        6920,
        6980
      ],
      "op": "JUMP",
      "path": "13"
    },
    "801": {
      "fn": "ERC20.transfer",
      "offset": [
        3727,
        3916
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "802": {
      "fn": "ERC20.transfer",
      "offset": [
        3806,
        3810
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "804": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "CALLER",
      "path": "23"
    },
    "805": {
      "fn": "ERC20.transfer",
      "offset": [
        3860,
        3888
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 14,
      "value": "0x240"
    },
    "808": {
      "fn": "Context._msgSender",
      "offset": [
        719,
        729
      ],
      "op": "DUP2",
      "path": "23"
    },
    "809": {
      "fn": "ERC20.transfer",
      "offset": [
        3877,
        3879
      ],
      "op": "DUP6",
      "path": "13"
    },
    "810": {
      "fn": "ERC20.transfer",
      "offset": [
        3881,
        3887
      ],
      "op": "DUP6",
      "path": "13"
    },
    "811": {
      "fn": "ERC20.transfer",
      "offset": [
        3860,
        3869
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x4F8"
    },
    "814": {
      "fn": "ERC20.transfer",
      "jump": "i",
      "offset": [
        3860,
        3888
      ],
      "op": "JUMP",
      "path": "13"
    },
    "815": {
      "fn": "ERC20.allowance",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "816": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "818": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "820": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "822": {
      "op": "SHL"
    },
    "823": {
      "op": "SUB"
    },
    "824": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "SWAP2",
      "path": "13",
      "statement": 15
    },
    "825": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "DUP3",
      "path": "13"
    },
    "826": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "AND",
      "path": "13"
    },
    "827": {
      "fn": "ERC20.allowance",
      "offset": [
        4063,
        4070
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "829": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "830": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "DUP2",
      "path": "13"
    },
    "831": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "832": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4100
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1"
    },
    "834": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "836": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "837": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "DUP2",
      "path": "13"
    },
    "838": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "839": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "841": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "DUP1",
      "path": "13"
    },
    "842": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "DUP4",
      "path": "13"
    },
    "843": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4107
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "844": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP4",
      "path": "13"
    },
    "845": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "846": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP5",
      "path": "13"
    },
    "847": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "AND",
      "path": "13"
    },
    "848": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "DUP3",
      "path": "13"
    },
    "849": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "850": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "851": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "852": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "853": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "854": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "855": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "856": {
      "fn": "ERC20.allowance",
      "offset": [
        4089,
        4116
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "857": {
      "fn": "ERC20.allowance",
      "jump": "o",
      "offset": [
        3974,
        4123
      ],
      "op": "JUMP",
      "path": "13"
    },
    "858": {
      "fn": "ERC20._approve",
      "offset": [
        10504,
        10874
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "859": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "861": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "863": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "865": {
      "op": "SHL"
    },
    "866": {
      "op": "SUB"
    },
    "867": {
      "fn": "ERC20._approve",
      "offset": [
        10635,
        10654
      ],
      "op": "DUP4",
      "path": "13",
      "statement": 16
    },
    "868": {
      "branch": 30,
      "fn": "ERC20._approve",
      "offset": [
        10635,
        10654
      ],
      "op": "AND",
      "path": "13"
    },
    "869": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x3BC"
    },
    "872": {
      "branch": 30,
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "873": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "875": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "876": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "880": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "882": {
      "op": "SHL"
    },
    "883": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "DUP2",
      "path": "13"
    },
    "884": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "885": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "887": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "889": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "DUP3",
      "path": "13"
    },
    "890": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "ADD",
      "path": "13"
    },
    "891": {
      "op": "MSTORE"
    },
    "892": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "894": {
      "op": "DUP1"
    },
    "895": {
      "op": "DUP3"
    },
    "896": {
      "op": "ADD"
    },
    "897": {
      "op": "MSTORE"
    },
    "898": {
      "op": "PUSH32",
      "value": "0x45524332303A20617070726F76652066726F6D20746865207A65726F20616464"
    },
    "931": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "933": {
      "op": "DUP3"
    },
    "934": {
      "op": "ADD"
    },
    "935": {
      "op": "MSTORE"
    },
    "936": {
      "op": "PUSH4",
      "value": "0x72657373"
    },
    "941": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "943": {
      "op": "SHL"
    },
    "944": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "946": {
      "op": "DUP3"
    },
    "947": {
      "op": "ADD"
    },
    "948": {
      "op": "MSTORE"
    },
    "949": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "951": {
      "op": "ADD"
    },
    "952": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "955": {
      "op": "JUMP"
    },
    "956": {
      "fn": "ERC20._approve",
      "offset": [
        10627,
        10695
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "957": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "959": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "961": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "963": {
      "op": "SHL"
    },
    "964": {
      "op": "SUB"
    },
    "965": {
      "fn": "ERC20._approve",
      "offset": [
        10713,
        10734
      ],
      "op": "DUP3",
      "path": "13",
      "statement": 17
    },
    "966": {
      "branch": 31,
      "fn": "ERC20._approve",
      "offset": [
        10713,
        10734
      ],
      "op": "AND",
      "path": "13"
    },
    "967": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x41D"
    },
    "970": {
      "branch": 31,
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "971": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "973": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "974": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "978": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "980": {
      "op": "SHL"
    },
    "981": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "DUP2",
      "path": "13"
    },
    "982": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "983": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "985": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "987": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "DUP3",
      "path": "13"
    },
    "988": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "ADD",
      "path": "13"
    },
    "989": {
      "op": "MSTORE"
    },
    "990": {
      "op": "PUSH1",
      "value": "0x22"
    },
    "992": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "994": {
      "op": "DUP3"
    },
    "995": {
      "op": "ADD"
    },
    "996": {
      "op": "MSTORE"
    },
    "997": {
      "op": "PUSH32",
      "value": "0x45524332303A20617070726F766520746F20746865207A65726F206164647265"
    },
    "1030": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1032": {
      "op": "DUP3"
    },
    "1033": {
      "op": "ADD"
    },
    "1034": {
      "op": "MSTORE"
    },
    "1035": {
      "op": "PUSH2",
      "value": "0x7373"
    },
    "1038": {
      "op": "PUSH1",
      "value": "0xF0"
    },
    "1040": {
      "op": "SHL"
    },
    "1041": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1043": {
      "op": "DUP3"
    },
    "1044": {
      "op": "ADD"
    },
    "1045": {
      "op": "MSTORE"
    },
    "1046": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1048": {
      "op": "ADD"
    },
    "1049": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "1052": {
      "op": "JUMP"
    },
    "1053": {
      "fn": "ERC20._approve",
      "offset": [
        10705,
        10773
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1054": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1056": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1058": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1060": {
      "op": "SHL"
    },
    "1061": {
      "op": "SUB"
    },
    "1062": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP4",
      "path": "13",
      "statement": 18
    },
    "1063": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1064": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "AND",
      "path": "13"
    },
    "1065": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "1067": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1068": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1069": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1070": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10795
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x1"
    },
    "1072": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "1074": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1075": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1076": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1077": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1079": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1080": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "DUP4",
      "path": "13"
    },
    "1081": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10802
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "1082": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "SWAP5",
      "path": "13"
    },
    "1083": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "DUP8",
      "path": "13"
    },
    "1084": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "AND",
      "path": "13"
    },
    "1085": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1086": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1087": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1088": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "SWAP5",
      "path": "13"
    },
    "1089": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1090": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1091": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1092": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1093": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1094": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10811
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "1095": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10820
      ],
      "op": "DUP6",
      "path": "13"
    },
    "1096": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10820
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1097": {
      "fn": "ERC20._approve",
      "offset": [
        10784,
        10820
      ],
      "op": "SSTORE",
      "path": "13"
    },
    "1098": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "SWAP1",
      "path": "13",
      "statement": 19
    },
    "1099": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1100": {
      "op": "DUP5"
    },
    "1101": {
      "op": "DUP2"
    },
    "1102": {
      "op": "MSTORE"
    },
    "1103": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "PUSH32",
      "path": "13",
      "value": "0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925"
    },
    "1136": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1137": {
      "op": "ADD"
    },
    "1138": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1140": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1141": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1142": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1143": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "SUB",
      "path": "13"
    },
    "1144": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1145": {
      "fn": "ERC20._approve",
      "offset": [
        10835,
        10867
      ],
      "op": "LOG3",
      "path": "13"
    },
    "1146": {
      "fn": "ERC20._approve",
      "offset": [
        10504,
        10874
      ],
      "op": "POP",
      "path": "13"
    },
    "1147": {
      "fn": "ERC20._approve",
      "offset": [
        10504,
        10874
      ],
      "op": "POP",
      "path": "13"
    },
    "1148": {
      "fn": "ERC20._approve",
      "offset": [
        10504,
        10874
      ],
      "op": "POP",
      "path": "13"
    },
    "1149": {
      "fn": "ERC20._approve",
      "jump": "o",
      "offset": [
        10504,
        10874
      ],
      "op": "JUMP",
      "path": "13"
    },
    "1150": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11155,
        11596
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1151": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11285,
        11309
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "1153": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11312,
        11337
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x48A"
    },
    "1156": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11322,
        11327
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1157": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11329,
        11336
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1158": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11312,
        11321
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x32F"
    },
    "1161": {
      "fn": "ERC20._spendAllowance",
      "jump": "i",
      "offset": [
        11312,
        11337
      ],
      "op": "JUMP",
      "path": "13"
    },
    "1162": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11312,
        11337
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1163": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11285,
        11337
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1164": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11285,
        11337
      ],
      "op": "POP",
      "path": "13"
    },
    "1165": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1167": {
      "op": "NOT"
    },
    "1168": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11351,
        11367
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1169": {
      "branch": 32,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11351,
        11388
      ],
      "op": "EQ",
      "path": "13"
    },
    "1170": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11347,
        11590
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x4F2"
    },
    "1173": {
      "branch": 32,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11347,
        11590
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "1174": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11432,
        11438
      ],
      "op": "DUP2",
      "path": "13",
      "statement": 20
    },
    "1175": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11412,
        11428
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1176": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11412,
        11438
      ],
      "op": "LT",
      "path": "13"
    },
    "1177": {
      "branch": 33,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11412,
        11438
      ],
      "op": "ISZERO",
      "path": "13"
    },
    "1178": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x4E5"
    },
    "1181": {
      "branch": 33,
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "1182": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1184": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1185": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1189": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1191": {
      "op": "SHL"
    },
    "1192": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1193": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1194": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1196": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "1198": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1199": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "ADD",
      "path": "13"
    },
    "1200": {
      "op": "MSTORE"
    },
    "1201": {
      "op": "PUSH1",
      "value": "0x1D"
    },
    "1203": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1205": {
      "op": "DUP3"
    },
    "1206": {
      "op": "ADD"
    },
    "1207": {
      "op": "MSTORE"
    },
    "1208": {
      "op": "PUSH32",
      "value": "0x45524332303A20696E73756666696369656E7420616C6C6F77616E6365000000"
    },
    "1241": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1243": {
      "op": "DUP3"
    },
    "1244": {
      "op": "ADD"
    },
    "1245": {
      "op": "MSTORE"
    },
    "1246": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1248": {
      "op": "ADD"
    },
    "1249": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "1252": {
      "op": "JUMP"
    },
    "1253": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11404,
        11472
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1254": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11514,
        11565
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 21,
      "value": "0x4F2"
    },
    "1257": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11523,
        11528
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1258": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11530,
        11537
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1259": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11558,
        11564
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1260": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11539,
        11555
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1261": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11539,
        11564
      ],
      "op": "SUB",
      "path": "13"
    },
    "1262": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11514,
        11522
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x35A"
    },
    "1265": {
      "fn": "ERC20._spendAllowance",
      "jump": "i",
      "offset": [
        11514,
        11565
      ],
      "op": "JUMP",
      "path": "13"
    },
    "1266": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11514,
        11565
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1267": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11275,
        11596
      ],
      "op": "POP",
      "path": "13"
    },
    "1268": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11155,
        11596
      ],
      "op": "POP",
      "path": "13"
    },
    "1269": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11155,
        11596
      ],
      "op": "POP",
      "path": "13"
    },
    "1270": {
      "fn": "ERC20._spendAllowance",
      "offset": [
        11155,
        11596
      ],
      "op": "POP",
      "path": "13"
    },
    "1271": {
      "fn": "ERC20._spendAllowance",
      "jump": "o",
      "offset": [
        11155,
        11596
      ],
      "op": "JUMP",
      "path": "13"
    },
    "1272": {
      "fn": "ERC20._transfer",
      "offset": [
        7473,
        8291
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1273": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1275": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1277": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1279": {
      "op": "SHL"
    },
    "1280": {
      "op": "SUB"
    },
    "1281": {
      "fn": "ERC20._transfer",
      "offset": [
        7599,
        7617
      ],
      "op": "DUP4",
      "path": "13",
      "statement": 22
    },
    "1282": {
      "branch": 34,
      "fn": "ERC20._transfer",
      "offset": [
        7599,
        7617
      ],
      "op": "AND",
      "path": "13"
    },
    "1283": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x55C"
    },
    "1286": {
      "branch": 34,
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "1287": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1289": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1290": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1294": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1296": {
      "op": "SHL"
    },
    "1297": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1298": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1299": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1301": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "1303": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1304": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "ADD",
      "path": "13"
    },
    "1305": {
      "op": "MSTORE"
    },
    "1306": {
      "op": "PUSH1",
      "value": "0x25"
    },
    "1308": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1310": {
      "op": "DUP3"
    },
    "1311": {
      "op": "ADD"
    },
    "1312": {
      "op": "MSTORE"
    },
    "1313": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E736665722066726F6D20746865207A65726F206164"
    },
    "1346": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1348": {
      "op": "DUP3"
    },
    "1349": {
      "op": "ADD"
    },
    "1350": {
      "op": "MSTORE"
    },
    "1351": {
      "op": "PUSH5",
      "value": "0x6472657373"
    },
    "1357": {
      "op": "PUSH1",
      "value": "0xD8"
    },
    "1359": {
      "op": "SHL"
    },
    "1360": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1362": {
      "op": "DUP3"
    },
    "1363": {
      "op": "ADD"
    },
    "1364": {
      "op": "MSTORE"
    },
    "1365": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1367": {
      "op": "ADD"
    },
    "1368": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "1371": {
      "op": "JUMP"
    },
    "1372": {
      "fn": "ERC20._transfer",
      "offset": [
        7591,
        7659
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1373": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1375": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1377": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1379": {
      "op": "SHL"
    },
    "1380": {
      "op": "SUB"
    },
    "1381": {
      "fn": "ERC20._transfer",
      "offset": [
        7677,
        7693
      ],
      "op": "DUP3",
      "path": "13",
      "statement": 23
    },
    "1382": {
      "branch": 35,
      "fn": "ERC20._transfer",
      "offset": [
        7677,
        7693
      ],
      "op": "AND",
      "path": "13"
    },
    "1383": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x5BE"
    },
    "1386": {
      "branch": 35,
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "1387": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1389": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1390": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1394": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1396": {
      "op": "SHL"
    },
    "1397": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1398": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1399": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1401": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "1403": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1404": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "ADD",
      "path": "13"
    },
    "1405": {
      "op": "MSTORE"
    },
    "1406": {
      "op": "PUSH1",
      "value": "0x23"
    },
    "1408": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1410": {
      "op": "DUP3"
    },
    "1411": {
      "op": "ADD"
    },
    "1412": {
      "op": "MSTORE"
    },
    "1413": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E7366657220746F20746865207A65726F2061646472"
    },
    "1446": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1448": {
      "op": "DUP3"
    },
    "1449": {
      "op": "ADD"
    },
    "1450": {
      "op": "MSTORE"
    },
    "1451": {
      "op": "PUSH3",
      "value": "0x657373"
    },
    "1455": {
      "op": "PUSH1",
      "value": "0xE8"
    },
    "1457": {
      "op": "SHL"
    },
    "1458": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1460": {
      "op": "DUP3"
    },
    "1461": {
      "op": "ADD"
    },
    "1462": {
      "op": "MSTORE"
    },
    "1463": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1465": {
      "op": "ADD"
    },
    "1466": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "1469": {
      "op": "JUMP"
    },
    "1470": {
      "fn": "ERC20._transfer",
      "offset": [
        7669,
        7733
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1471": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1473": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1475": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1477": {
      "op": "SHL"
    },
    "1478": {
      "op": "SUB"
    },
    "1479": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "DUP4",
      "path": "13"
    },
    "1480": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "AND",
      "path": "13"
    },
    "1481": {
      "fn": "ERC20._transfer",
      "offset": [
        7793,
        7812
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "1483": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1484": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1485": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1486": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "1488": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1489": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1490": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1491": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1493": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1494": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "1495": {
      "fn": "ERC20._transfer",
      "offset": [
        7815,
        7830
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "1496": {
      "fn": "ERC20._transfer",
      "offset": [
        7848,
        7869
      ],
      "op": "DUP2",
      "path": "13",
      "statement": 24
    },
    "1497": {
      "fn": "ERC20._transfer",
      "offset": [
        7848,
        7869
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1498": {
      "fn": "ERC20._transfer",
      "offset": [
        7848,
        7869
      ],
      "op": "LT",
      "path": "13"
    },
    "1499": {
      "branch": 36,
      "fn": "ERC20._transfer",
      "offset": [
        7848,
        7869
      ],
      "op": "ISZERO",
      "path": "13"
    },
    "1500": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x636"
    },
    "1503": {
      "branch": 36,
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "JUMPI",
      "path": "13"
    },
    "1504": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1506": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1507": {
      "op": "PUSH3",
      "value": "0x461BCD"
    },
    "1511": {
      "op": "PUSH1",
      "value": "0xE5"
    },
    "1513": {
      "op": "SHL"
    },
    "1514": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1515": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1516": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1518": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x4"
    },
    "1520": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "DUP3",
      "path": "13"
    },
    "1521": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "ADD",
      "path": "13"
    },
    "1522": {
      "op": "MSTORE"
    },
    "1523": {
      "op": "PUSH1",
      "value": "0x26"
    },
    "1525": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "1527": {
      "op": "DUP3"
    },
    "1528": {
      "op": "ADD"
    },
    "1529": {
      "op": "MSTORE"
    },
    "1530": {
      "op": "PUSH32",
      "value": "0x45524332303A207472616E7366657220616D6F756E7420657863656564732062"
    },
    "1563": {
      "op": "PUSH1",
      "value": "0x44"
    },
    "1565": {
      "op": "DUP3"
    },
    "1566": {
      "op": "ADD"
    },
    "1567": {
      "op": "MSTORE"
    },
    "1568": {
      "op": "PUSH6",
      "value": "0x616C616E6365"
    },
    "1575": {
      "op": "PUSH1",
      "value": "0xD0"
    },
    "1577": {
      "op": "SHL"
    },
    "1578": {
      "op": "PUSH1",
      "value": "0x64"
    },
    "1580": {
      "op": "DUP3"
    },
    "1581": {
      "op": "ADD"
    },
    "1582": {
      "op": "MSTORE"
    },
    "1583": {
      "op": "PUSH1",
      "value": "0x84"
    },
    "1585": {
      "op": "ADD"
    },
    "1586": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "PUSH2",
      "path": "13",
      "value": "0x30B"
    },
    "1589": {
      "op": "JUMP"
    },
    "1590": {
      "fn": "ERC20._transfer",
      "offset": [
        7840,
        7912
      ],
      "op": "JUMPDEST",
      "path": "13"
    },
    "1591": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1593": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1595": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1597": {
      "op": "SHL"
    },
    "1598": {
      "op": "SUB"
    },
    "1599": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP5",
      "path": "13",
      "statement": 25
    },
    "1600": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1601": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "AND",
      "path": "13"
    },
    "1602": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7955
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x0"
    },
    "1604": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1605": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1606": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1607": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x20"
    },
    "1609": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1610": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP2",
      "path": "13"
    },
    "1611": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1612": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1614": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1615": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "DUP4",
      "path": "13"
    },
    "1616": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7961
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "1617": {
      "fn": "ERC20._transfer",
      "offset": [
        7964,
        7984
      ],
      "op": "DUP8",
      "path": "13"
    },
    "1618": {
      "fn": "ERC20._transfer",
      "offset": [
        7964,
        7984
      ],
      "op": "DUP8",
      "path": "13"
    },
    "1619": {
      "fn": "ERC20._transfer",
      "offset": [
        7964,
        7984
      ],
      "op": "SUB",
      "path": "13"
    },
    "1620": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7984
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1621": {
      "fn": "ERC20._transfer",
      "offset": [
        7946,
        7984
      ],
      "op": "SSTORE",
      "path": "13"
    },
    "1622": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "SWAP4",
      "path": "13",
      "statement": 26
    },
    "1623": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "DUP8",
      "path": "13"
    },
    "1624": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "AND",
      "path": "13"
    },
    "1625": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1626": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "DUP4",
      "path": "13"
    },
    "1627": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "MSTORE",
      "path": "13"
    },
    "1628": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1629": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "DUP5",
      "path": "13"
    },
    "1630": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1631": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "KECCAK256",
      "path": "13"
    },
    "1632": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1633": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "SLOAD",
      "path": "13"
    },
    "1634": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "DUP8",
      "path": "13"
    },
    "1635": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "ADD",
      "path": "13"
    },
    "1636": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1637": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8184
      ],
      "op": "SSTORE",
      "path": "13"
    },
    "1638": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "SWAP3",
      "path": "13",
      "statement": 27
    },
    "1639": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1640": {
      "op": "DUP6"
    },
    "1641": {
      "op": "DUP2"
    },
    "1642": {
      "op": "MSTORE"
    },
    "1643": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1644": {
      "fn": "ERC20._transfer",
      "offset": [
        8161,
        8174
      ],
      "op": "SWAP3",
      "path": "13"
    },
    "1645": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "PUSH32",
      "path": "13",
      "value": "0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF"
    },
    "1678": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1679": {
      "op": "ADD"
    },
    "1680": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "PUSH1",
      "path": "13",
      "value": "0x40"
    },
    "1682": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "MLOAD",
      "path": "13"
    },
    "1683": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "DUP1",
      "path": "13"
    },
    "1684": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "SWAP2",
      "path": "13"
    },
    "1685": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "SUB",
      "path": "13"
    },
    "1686": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "SWAP1",
      "path": "13"
    },
    "1687": {
      "fn": "ERC20._transfer",
      "offset": [
        8210,
        8236
      ],
      "op": "LOG3",
      "path": "13"
    },
    "1688": {
      "fn": "ERC20._transfer",
      "offset": [
        8247,
        8284
      ],
      "op": "PUSH2",
      "path": "13",
      "statement": 28,
      "value": "0x4F2"
    },
    "1691": {
      "fn": "ERC20._beforeTokenTransfer",
      "offset": [
        12180,
        12301
      ],
      "op": "JUMP",
      "path": "13"
    },
    "1692": {
      "op": "JUMPDEST"
    },
    "1693": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1695": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1697": {
      "op": "DUP1"
    },
    "1698": {
      "op": "DUP4"
    },
    "1699": {
      "op": "MSTORE"
    },
    "1700": {
      "op": "DUP4"
    },
    "1701": {
      "op": "MLOAD"
    },
    "1702": {
      "op": "DUP1"
    },
    "1703": {
      "op": "DUP3"
    },
    "1704": {
      "op": "DUP6"
    },
    "1705": {
      "op": "ADD"
    },
    "1706": {
      "op": "MSTORE"
    },
    "1707": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1709": {
      "op": "JUMPDEST"
    },
    "1710": {
      "op": "DUP2"
    },
    "1711": {
      "op": "DUP2"
    },
    "1712": {
      "op": "LT"
    },
    "1713": {
      "op": "ISZERO"
    },
    "1714": {
      "op": "PUSH2",
      "value": "0x6C9"
    },
    "1717": {
      "op": "JUMPI"
    },
    "1718": {
      "op": "DUP6"
    },
    "1719": {
      "op": "DUP2"
    },
    "1720": {
      "op": "ADD"
    },
    "1721": {
      "op": "DUP4"
    },
    "1722": {
      "op": "ADD"
    },
    "1723": {
      "op": "MLOAD"
    },
    "1724": {
      "op": "DUP6"
    },
    "1725": {
      "op": "DUP3"
    },
    "1726": {
      "op": "ADD"
    },
    "1727": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1729": {
      "op": "ADD"
    },
    "1730": {
      "op": "MSTORE"
    },
    "1731": {
      "op": "DUP3"
    },
    "1732": {
      "op": "ADD"
    },
    "1733": {
      "op": "PUSH2",
      "value": "0x6AD"
    },
    "1736": {
      "op": "JUMP"
    },
    "1737": {
      "op": "JUMPDEST"
    },
    "1738": {
      "op": "POP"
    },
    "1739": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1741": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1743": {
      "op": "DUP3"
    },
    "1744": {
      "op": "DUP7"
    },
    "1745": {
      "op": "ADD"
    },
    "1746": {
      "op": "ADD"
    },
    "1747": {
      "op": "MSTORE"
    },
    "1748": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1750": {
      "op": "PUSH1",
      "value": "0x1F"
    },
    "1752": {
      "op": "NOT"
    },
    "1753": {
      "op": "PUSH1",
      "value": "0x1F"
    },
    "1755": {
      "op": "DUP4"
    },
    "1756": {
      "op": "ADD"
    },
    "1757": {
      "op": "AND"
    },
    "1758": {
      "op": "DUP6"
    },
    "1759": {
      "op": "ADD"
    },
    "1760": {
      "op": "ADD"
    },
    "1761": {
      "op": "SWAP3"
    },
    "1762": {
      "op": "POP"
    },
    "1763": {
      "op": "POP"
    },
    "1764": {
      "op": "POP"
    },
    "1765": {
      "op": "SWAP3"
    },
    "1766": {
      "op": "SWAP2"
    },
    "1767": {
      "op": "POP"
    },
    "1768": {
      "op": "POP"
    },
    "1769": {
      "jump": "o",
      "op": "JUMP"
    },
    "1770": {
      "op": "JUMPDEST"
    },
    "1771": {
      "op": "DUP1"
    },
    "1772": {
      "op": "CALLDATALOAD"
    },
    "1773": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1775": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1777": {
      "op": "PUSH1",
      "value": "0xA0"
    },
    "1779": {
      "op": "SHL"
    },
    "1780": {
      "op": "SUB"
    },
    "1781": {
      "op": "DUP2"
    },
    "1782": {
      "op": "AND"
    },
    "1783": {
      "op": "DUP2"
    },
    "1784": {
      "op": "EQ"
    },
    "1785": {
      "op": "PUSH2",
      "value": "0x701"
    },
    "1788": {
      "op": "JUMPI"
    },
    "1789": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1791": {
      "op": "DUP1"
    },
    "1792": {
      "op": "REVERT"
    },
    "1793": {
      "op": "JUMPDEST"
    },
    "1794": {
      "op": "SWAP2"
    },
    "1795": {
      "op": "SWAP1"
    },
    "1796": {
      "op": "POP"
    },
    "1797": {
      "jump": "o",
      "op": "JUMP"
    },
    "1798": {
      "op": "JUMPDEST"
    },
    "1799": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1801": {
      "op": "DUP1"
    },
    "1802": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1804": {
      "op": "DUP4"
    },
    "1805": {
      "op": "DUP6"
    },
    "1806": {
      "op": "SUB"
    },
    "1807": {
      "op": "SLT"
    },
    "1808": {
      "op": "ISZERO"
    },
    "1809": {
      "op": "PUSH2",
      "value": "0x719"
    },
    "1812": {
      "op": "JUMPI"
    },
    "1813": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1815": {
      "op": "DUP1"
    },
    "1816": {
      "op": "REVERT"
    },
    "1817": {
      "op": "JUMPDEST"
    },
    "1818": {
      "op": "PUSH2",
      "value": "0x722"
    },
    "1821": {
      "op": "DUP4"
    },
    "1822": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1825": {
      "jump": "i",
      "op": "JUMP"
    },
    "1826": {
      "op": "JUMPDEST"
    },
    "1827": {
      "op": "SWAP5"
    },
    "1828": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1830": {
      "op": "SWAP4"
    },
    "1831": {
      "op": "SWAP1"
    },
    "1832": {
      "op": "SWAP4"
    },
    "1833": {
      "op": "ADD"
    },
    "1834": {
      "op": "CALLDATALOAD"
    },
    "1835": {
      "op": "SWAP4"
    },
    "1836": {
      "op": "POP"
    },
    "1837": {
      "op": "POP"
    },
    "1838": {
      "op": "POP"
    },
    "1839": {
      "jump": "o",
      "op": "JUMP"
    },
    "1840": {
      "op": "JUMPDEST"
    },
    "1841": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1843": {
      "op": "DUP1"
    },
    "1844": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1846": {
      "op": "PUSH1",
      "value": "0x60"
    },
    "1848": {
      "op": "DUP5"
    },
    "1849": {
      "op": "DUP7"
    },
    "1850": {
      "op": "SUB"
    },
    "1851": {
      "op": "SLT"
    },
    "1852": {
      "op": "ISZERO"
    },
    "1853": {
      "op": "PUSH2",
      "value": "0x745"
    },
    "1856": {
      "op": "JUMPI"
    },
    "1857": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1859": {
      "op": "DUP1"
    },
    "1860": {
      "op": "REVERT"
    },
    "1861": {
      "op": "JUMPDEST"
    },
    "1862": {
      "op": "PUSH2",
      "value": "0x74E"
    },
    "1865": {
      "op": "DUP5"
    },
    "1866": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1869": {
      "jump": "i",
      "op": "JUMP"
    },
    "1870": {
      "op": "JUMPDEST"
    },
    "1871": {
      "op": "SWAP3"
    },
    "1872": {
      "op": "POP"
    },
    "1873": {
      "op": "PUSH2",
      "value": "0x75C"
    },
    "1876": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1878": {
      "op": "DUP6"
    },
    "1879": {
      "op": "ADD"
    },
    "1880": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1883": {
      "jump": "i",
      "op": "JUMP"
    },
    "1884": {
      "op": "JUMPDEST"
    },
    "1885": {
      "op": "SWAP2"
    },
    "1886": {
      "op": "POP"
    },
    "1887": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1889": {
      "op": "DUP5"
    },
    "1890": {
      "op": "ADD"
    },
    "1891": {
      "op": "CALLDATALOAD"
    },
    "1892": {
      "op": "SWAP1"
    },
    "1893": {
      "op": "POP"
    },
    "1894": {
      "op": "SWAP3"
    },
    "1895": {
      "op": "POP"
    },
    "1896": {
      "op": "SWAP3"
    },
    "1897": {
      "op": "POP"
    },
    "1898": {
      "op": "SWAP3"
    },
    "1899": {
      "jump": "o",
      "op": "JUMP"
    },
    "1900": {
      "op": "JUMPDEST"
    },
    "1901": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1903": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1905": {
      "op": "DUP3"
    },
    "1906": {
      "op": "DUP5"
    },
    "1907": {
      "op": "SUB"
    },
    "1908": {
      "op": "SLT"
    },
    "1909": {
      "op": "ISZERO"
    },
    "1910": {
      "op": "PUSH2",
      "value": "0x77E"
    },
    "1913": {
      "op": "JUMPI"
    },
    "1914": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1916": {
      "op": "DUP1"
    },
    "1917": {
      "op": "REVERT"
    },
    "1918": {
      "op": "JUMPDEST"
    },
    "1919": {
      "op": "PUSH2",
      "value": "0x787"
    },
    "1922": {
      "op": "DUP3"
    },
    "1923": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1926": {
      "jump": "i",
      "op": "JUMP"
    },
    "1927": {
      "op": "JUMPDEST"
    },
    "1928": {
      "op": "SWAP4"
    },
    "1929": {
      "op": "SWAP3"
    },
    "1930": {
      "op": "POP"
    },
    "1931": {
      "op": "POP"
    },
    "1932": {
      "op": "POP"
    },
    "1933": {
      "jump": "o",
      "op": "JUMP"
    },
    "1934": {
      "op": "JUMPDEST"
    },
    "1935": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1937": {
      "op": "DUP1"
    },
    "1938": {
      "op": "PUSH1",
      "value": "0x40"
    },
    "1940": {
      "op": "DUP4"
    },
    "1941": {
      "op": "DUP6"
    },
    "1942": {
      "op": "SUB"
    },
    "1943": {
      "op": "SLT"
    },
    "1944": {
      "op": "ISZERO"
    },
    "1945": {
      "op": "PUSH2",
      "value": "0x7A1"
    },
    "1948": {
      "op": "JUMPI"
    },
    "1949": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "1951": {
      "op": "DUP1"
    },
    "1952": {
      "op": "REVERT"
    },
    "1953": {
      "op": "JUMPDEST"
    },
    "1954": {
      "op": "PUSH2",
      "value": "0x7AA"
    },
    "1957": {
      "op": "DUP4"
    },
    "1958": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1961": {
      "jump": "i",
      "op": "JUMP"
    },
    "1962": {
      "op": "JUMPDEST"
    },
    "1963": {
      "op": "SWAP2"
    },
    "1964": {
      "op": "POP"
    },
    "1965": {
      "op": "PUSH2",
      "value": "0x7B8"
    },
    "1968": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "1970": {
      "op": "DUP5"
    },
    "1971": {
      "op": "ADD"
    },
    "1972": {
      "op": "PUSH2",
      "value": "0x6EA"
    },
    "1975": {
      "jump": "i",
      "op": "JUMP"
    },
    "1976": {
      "op": "JUMPDEST"
    },
    "1977": {
      "op": "SWAP1"
    },
    "1978": {
      "op": "POP"
    },
    "1979": {
      "op": "SWAP3"
    },
    "1980": {
      "op": "POP"
    },
    "1981": {
      "op": "SWAP3"
    },
    "1982": {
      "op": "SWAP1"
    },
    "1983": {
      "op": "POP"
    },
    "1984": {
      "jump": "o",
      "op": "JUMP"
    },
    "1985": {
      "op": "JUMPDEST"
    },
    "1986": {
      "op": "PUSH1",
      "value": "0x1"
    },
    "1988": {
      "op": "DUP2"
    },
    "1989": {
      "op": "DUP2"
    },
    "1990": {
      "op": "SHR"
    },
    "1991": {
      "op": "SWAP1"
    },
    "1992": {
      "op": "DUP3"
    },
    "1993": {
      "op": "AND"
    },
    "1994": {
      "op": "DUP1"
    },
    "1995": {
      "op": "PUSH2",
      "value": "0x7D5"
    },
    "1998": {
      "op": "JUMPI"
    },
    "1999": {
      "op": "PUSH1",
      "value": "0x7F"
    },
    "2001": {
      "op": "DUP3"
    },
    "2002": {
      "op": "AND"
    },
    "2003": {
      "op": "SWAP2"
    },
    "2004": {
      "op": "POP"
    },
    "2005": {
      "op": "JUMPDEST"
    },
    "2006": {
      "op": "PUSH1",
      "value": "0x20"
    },
    "2008": {
      "op": "DUP3"
    },
    "2009": {
      "op": "LT"
    },
    "2010": {
      "op": "DUP2"
    },
    "2011": {
      "op": "SUB"
    },
    "2012": {
      "op": "PUSH2",
      "value": "0x7F5"
    },
    "2015": {
      "op": "JUMPI"
    },
    "2016": {
      "op": "PUSH4",
      "value": "0x4E487B71"
    },
    "2021": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "2023": {
      "op": "SHL"
    },
    "2024": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2026": {
      "op": "MSTORE"
    },
    "2027": {
      "op": "PUSH1",
      "value": "0x22"
    },
    "2029": {
      "op": "PUSH1",
      "value": "0x4"
    },
    "2031": {
      "op": "MSTORE"
    },
    "2032": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "2034": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2036": {
      "op": "REVERT"
    },
    "2037": {
      "op": "JUMPDEST"
    },
    "2038": {
      "op": "POP"
    },
    "2039": {
      "op": "SWAP2"
    },
    "2040": {
      "op": "SWAP1"
    },
    "2041": {
      "op": "POP"
    },
    "2042": {
      "jump": "o",
      "op": "JUMP"
    },
    "2043": {
      "op": "JUMPDEST"
    },
    "2044": {
      "op": "DUP1"
    },
    "2045": {
      "op": "DUP3"
    },
    "2046": {
      "op": "ADD"
    },
    "2047": {
      "op": "DUP1"
    },
    "2048": {
      "op": "DUP3"
    },
    "2049": {
      "op": "GT"
    },
    "2050": {
      "op": "ISZERO"
    },
    "2051": {
      "op": "PUSH2",
      "value": "0x246"
    },
    "2054": {
      "op": "JUMPI"
    },
    "2055": {
      "op": "PUSH4",
      "value": "0x4E487B71"
    },
    "2060": {
      "op": "PUSH1",
      "value": "0xE0"
    },
    "2062": {
      "op": "SHL"
    },
    "2063": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2065": {
      "op": "MSTORE"
    },
    "2066": {
      "op": "PUSH1",
      "value": "0x11"
    },
    "2068": {
      "op": "PUSH1",
      "value": "0x4"
    },
    "2070": {
      "op": "MSTORE"
    },
    "2071": {
      "op": "PUSH1",
      "value": "0x24"
    },
    "2073": {
      "op": "PUSH1",
      "value": "0x0"
    },
    "2075": {
      "op": "REVERT"
    }
  },
  "sha1": "88ee5db718680555f1adec6b749080d6ae5aa919",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * The default value of {decimals} is 18. To select a different value for\n     * {decimals} you should overload it.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless this function is\n     * overridden;\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = allowance(owner, spender);\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     */\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, amount);\n\n        uint256 fromBalance = _balances[from];\n        require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n        unchecked {\n            _balances[from] = fromBalance - amount;\n            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\n            // decrementing then incrementing.\n            _balances[to] += amount;\n        }\n\n        emit Transfer(from, to, amount);\n\n        _afterTokenTransfer(from, to, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        unchecked {\n            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\n            _balances[account] += amount;\n        }\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n            // Overflow not possible: amount <= accountBalance <= totalSupply.\n            _totalSupply -= amount;\n        }\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    /**\n     * @dev Hook that is called after any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * has been transferred to `to`.\n     * - when `from` is zero, `amount` tokens have been minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\n",
  "sourceMap": "1401:11610:13:-:0;;;1976:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2042:5;:13;2050:5;2042;:13;:::i;:::-;-1:-1:-1;2065:7:13;:17;2075:7;2065;:17;:::i;:::-;;1976:113;;1401:11610;;14:127:67;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:840;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:67;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:67;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;954:1;932:15;;;928:24;;;921:35;;;;936:6;146:840;-1:-1:-1;;;;146:840:67:o;991:562::-;1090:6;1098;1151:2;1139:9;1130:7;1126:23;1122:32;1119:52;;;1167:1;1164;1157:12;1119:52;1194:16;;-1:-1:-1;;;;;1259:14:67;;;1256:34;;;1286:1;1283;1276:12;1256:34;1309:61;1362:7;1353:6;1342:9;1338:22;1309:61;:::i;:::-;1299:71;;1416:2;1405:9;1401:18;1395:25;1379:41;;1445:2;1435:8;1432:16;1429:36;;;1461:1;1458;1451:12;1429:36;;1484:63;1539:7;1528:8;1517:9;1513:24;1484:63;:::i;:::-;1474:73;;;991:562;;;;;:::o;1558:380::-;1637:1;1633:12;;;;1680;;;1701:61;;1755:4;1747:6;1743:17;1733:27;;1701:61;1808:2;1800:6;1797:14;1777:18;1774:38;1771:161;;1854:10;1849:3;1845:20;1842:1;1835:31;1889:4;1886:1;1879:15;1917:4;1914:1;1907:15;1771:161;;1558:380;;;:::o;2069:545::-;2171:2;2166:3;2163:11;2160:448;;;2207:1;2232:5;2228:2;2221:17;2277:4;2273:2;2263:19;2347:2;2335:10;2331:19;2328:1;2324:27;2318:4;2314:38;2383:4;2371:10;2368:20;2365:47;;;-1:-1:-1;2406:4:67;2365:47;2461:2;2456:3;2452:12;2449:1;2445:20;2439:4;2435:31;2425:41;;2516:82;2534:2;2527:5;2524:13;2516:82;;;2579:17;;;2560:1;2549:13;2516:82;;;2520:3;;;2160:448;2069:545;;;:::o;2790:1352::-;2910:10;;-1:-1:-1;;;;;2932:30:67;;2929:56;;;2965:18;;:::i;:::-;2994:97;3084:6;3044:38;3076:4;3070:11;3044:38;:::i;:::-;3038:4;2994:97;:::i;:::-;3146:4;;3210:2;3199:14;;3227:1;3222:663;;;;3929:1;3946:6;3943:89;;;-1:-1:-1;3998:19:67;;;3992:26;3943:89;-1:-1:-1;;2747:1:67;2743:11;;;2739:24;2735:29;2725:40;2771:1;2767:11;;;2722:57;4045:81;;3192:944;;3222:663;2016:1;2009:14;;;2053:4;2040:18;;-1:-1:-1;;3258:20:67;;;3376:236;3390:7;3387:1;3384:14;3376:236;;;3479:19;;;3473:26;3458:42;;3571:27;;;;3539:1;3527:14;;;;3406:19;;3376:236;;;3380:3;3640:6;3631:7;3628:19;3625:201;;;3701:19;;;3695:26;-1:-1:-1;;3784:1:67;3780:14;;;3796:3;3776:24;3772:37;3768:42;3753:58;3738:74;;3625:201;-1:-1:-1;;;;;3872:1:67;3856:14;;;3852:22;3839:36;;-1:-1:-1;2790:1352:67:o;:::-;1401:11610:13;;;;;;",
  "sourcePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.8.2/contracts/token/ERC20/ERC20.sol",
  "type": "contract"
}