{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    }
  ],
  "allSourcePaths": {
    "21": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Address.sol",
    "23": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/StorageSlot.sol",
    "5": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/interfaces/draft-IERC1822.sol",
    "7": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
    "9": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/beacon/IBeacon.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
    "exportedSymbols": {
      "Address": [
        26374
      ],
      "ERC1967Upgrade": [
        27521
      ],
      "IBeacon": [
        28646
      ],
      "IERC1822Proxiable": [
        28636
      ],
      "StorageSlot": [
        28706
      ]
    },
    "id": 27522,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 27205,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".2"
        ],
        "nodeType": "PragmaDirective",
        "src": "116:23:7"
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/beacon/IBeacon.sol",
        "file": "../beacon/IBeacon.sol",
        "id": 27206,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27522,
        "sourceUnit": 28647,
        "src": "141:31:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/interfaces/draft-IERC1822.sol",
        "file": "../../interfaces/draft-IERC1822.sol",
        "id": 27207,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27522,
        "sourceUnit": 28637,
        "src": "173:45:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/Address.sol",
        "file": "../../utils/Address.sol",
        "id": 27208,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27522,
        "sourceUnit": 26375,
        "src": "219:33:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/StorageSlot.sol",
        "file": "../../utils/StorageSlot.sol",
        "id": 27209,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 27522,
        "sourceUnit": 28707,
        "src": "253:37:7",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 27210,
          "nodeType": "StructuredDocumentation",
          "src": "292:236:7",
          "text": " @dev This abstract contract provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n _Available since v4.1._\n @custom:oz-upgrades-unsafe-allow delegatecall"
        },
        "fullyImplemented": true,
        "id": 27521,
        "linearizedBaseContracts": [
          27521
        ],
        "name": "ERC1967Upgrade",
        "nameLocation": "547:14:7",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 27213,
            "mutability": "constant",
            "name": "_ROLLBACK_SLOT",
            "nameLocation": "672:14:7",
            "nodeType": "VariableDeclaration",
            "scope": 27521,
            "src": "647:108:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27211,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "647:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307834393130666466613136666564333236306564306537313437663763633664613131613630323038623562393430366431326136333536313466666439313433",
              "id": 27212,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "689:66:7",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_33048860383849004559742813297059419343339852917517107368639918720169455489347_by_1",
                "typeString": "int_const 3304...(69 digits omitted)...9347"
              },
              "value": "0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "documentation": {
              "id": 27214,
              "nodeType": "StructuredDocumentation",
              "src": "762:214:7",
              "text": " @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 27217,
            "mutability": "constant",
            "name": "_IMPLEMENTATION_SLOT",
            "nameLocation": "1007:20:7",
            "nodeType": "VariableDeclaration",
            "scope": 27521,
            "src": "981:115:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27215,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "981:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263",
              "id": 27216,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1030:66:7",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1",
                "typeString": "int_const 2444...(69 digits omitted)...5612"
              },
              "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 27218,
              "nodeType": "StructuredDocumentation",
              "src": "1103:68:7",
              "text": " @dev Emitted when the implementation is upgraded."
            },
            "id": 27222,
            "name": "Upgraded",
            "nameLocation": "1182:8:7",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 27221,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27220,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementation",
                  "nameLocation": "1207:14:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27222,
                  "src": "1191:30:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27219,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1191:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1190:32:7"
            },
            "src": "1176:47:7"
          },
          {
            "body": {
              "id": 27234,
              "nodeType": "Block",
              "src": "1363:78:7",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 27230,
                          "name": "_IMPLEMENTATION_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27217,
                          "src": "1407:20:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27228,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28706,
                          "src": "1380:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 27229,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28672,
                        "src": "1380:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 27231,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1380:48:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 27232,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28651,
                    "src": "1380:54:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 27227,
                  "id": 27233,
                  "nodeType": "Return",
                  "src": "1373:61:7"
                }
              ]
            },
            "documentation": {
              "id": 27223,
              "nodeType": "StructuredDocumentation",
              "src": "1229:67:7",
              "text": " @dev Returns the current implementation address."
            },
            "id": 27235,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getImplementation",
            "nameLocation": "1310:18:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27224,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1328:2:7"
            },
            "returnParameters": {
              "id": 27227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27226,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27235,
                  "src": "1354:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27225,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1353:9:7"
            },
            "scope": 27521,
            "src": "1301:140:7",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27258,
              "nodeType": "Block",
              "src": "1595:196:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 27244,
                            "name": "newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27238,
                            "src": "1632:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27242,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26374,
                            "src": "1613:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$26374_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 27243,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26097,
                          "src": "1613:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 27245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1613:37:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 27246,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1652:47:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        },
                        "value": "ERC1967: new implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65",
                          "typeString": "literal_string \"ERC1967: new implementation is not a contract\""
                        }
                      ],
                      "id": 27241,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1605:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1605:95:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27248,
                  "nodeType": "ExpressionStatement",
                  "src": "1605:95:7"
                },
                {
                  "expression": {
                    "id": 27256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 27252,
                            "name": "_IMPLEMENTATION_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27217,
                            "src": "1737:20:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 27249,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28706,
                            "src": "1710:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 27251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28672,
                          "src": "1710:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 27253,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1710:48:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 27254,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28651,
                      "src": "1710:54:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27255,
                      "name": "newImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27238,
                      "src": "1767:17:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1710:74:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 27257,
                  "nodeType": "ExpressionStatement",
                  "src": "1710:74:7"
                }
              ]
            },
            "documentation": {
              "id": 27236,
              "nodeType": "StructuredDocumentation",
              "src": "1447:80:7",
              "text": " @dev Stores a new address in the EIP1967 implementation slot."
            },
            "id": 27259,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setImplementation",
            "nameLocation": "1541:18:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27238,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "1568:17:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27259,
                  "src": "1560:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27237,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1560:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1559:27:7"
            },
            "returnParameters": {
              "id": 27240,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1595:0:7"
            },
            "scope": 27521,
            "src": "1532:259:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27273,
              "nodeType": "Block",
              "src": "1953:96:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27266,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27262,
                        "src": "1982:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27265,
                      "name": "_setImplementation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27259,
                      "src": "1963:18:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1963:37:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27268,
                  "nodeType": "ExpressionStatement",
                  "src": "1963:37:7"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 27270,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27262,
                        "src": "2024:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27269,
                      "name": "Upgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27222,
                      "src": "2015:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2015:27:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27272,
                  "nodeType": "EmitStatement",
                  "src": "2010:32:7"
                }
              ]
            },
            "documentation": {
              "id": 27260,
              "nodeType": "StructuredDocumentation",
              "src": "1797:95:7",
              "text": " @dev Perform implementation upgrade\n Emits an {Upgraded} event."
            },
            "id": 27274,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeTo",
            "nameLocation": "1906:10:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27263,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27262,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "1925:17:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27274,
                  "src": "1917:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27261,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1917:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1916:27:7"
            },
            "returnParameters": {
              "id": 27264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1953:0:7"
            },
            "scope": 27521,
            "src": "1897:152:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27303,
              "nodeType": "Block",
              "src": "2311:167:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27285,
                        "name": "newImplementation",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27277,
                        "src": "2332:17:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27284,
                      "name": "_upgradeTo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27274,
                      "src": "2321:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2321:29:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27287,
                  "nodeType": "ExpressionStatement",
                  "src": "2321:29:7"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 27293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 27288,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27279,
                          "src": "2364:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27289,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "2364:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 27290,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2378:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "2364:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 27292,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27281,
                      "src": "2383:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2364:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27302,
                  "nodeType": "IfStatement",
                  "src": "2360:112:7",
                  "trueBody": {
                    "id": 27301,
                    "nodeType": "Block",
                    "src": "2394:78:7",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27297,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27277,
                              "src": "2437:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 27298,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27279,
                              "src": "2456:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 27294,
                              "name": "Address",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26374,
                              "src": "2408:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Address_$26374_$",
                                "typeString": "type(library Address)"
                              }
                            },
                            "id": 27296,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionDelegateCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 26307,
                            "src": "2408:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 27299,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2408:53:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27300,
                        "nodeType": "ExpressionStatement",
                        "src": "2408:53:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27275,
              "nodeType": "StructuredDocumentation",
              "src": "2055:123:7",
              "text": " @dev Perform implementation upgrade with additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 27304,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCall",
            "nameLocation": "2192:17:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27282,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27277,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2227:17:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27304,
                  "src": "2219:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27276,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2219:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27279,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2267:4:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27304,
                  "src": "2254:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27278,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2254:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27281,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "2286:9:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27304,
                  "src": "2281:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27280,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2281:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2209:92:7"
            },
            "returnParameters": {
              "id": 27283,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2311:0:7"
            },
            "scope": 27521,
            "src": "2183:295:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27356,
              "nodeType": "Block",
              "src": "2782:820:7",
              "statements": [
                {
                  "condition": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 27316,
                          "name": "_ROLLBACK_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27213,
                          "src": "3123:14:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27314,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28706,
                          "src": "3096:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 27315,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getBooleanSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28683,
                        "src": "3096:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BooleanSlot_$28655_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.BooleanSlot storage pointer)"
                        }
                      },
                      "id": 27317,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3096:42:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_BooleanSlot_$28655_storage_ptr",
                        "typeString": "struct StorageSlot.BooleanSlot storage pointer"
                      }
                    },
                    "id": 27318,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28654,
                    "src": "3096:48:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 27354,
                    "nodeType": "Block",
                    "src": "3214:382:7",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 27339,
                              "nodeType": "Block",
                              "src": "3308:115:7",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "id": 27335,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 27333,
                                          "name": "slot",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 27330,
                                          "src": "3334:4:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "id": 27334,
                                          "name": "_IMPLEMENTATION_SLOT",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 27217,
                                          "src": "3342:20:7",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "src": "3334:28:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      {
                                        "hexValue": "45524331393637557067726164653a20756e737570706f727465642070726f786961626c6555554944",
                                        "id": 27336,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3364:43:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        },
                                        "value": "ERC1967Upgrade: unsupported proxiableUUID"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        {
                                          "typeIdentifier": "t_stringliteral_76b6b6debfc5febf101145a79ecf0b0d2e89e397dfdab2bca99888370411152c",
                                          "typeString": "literal_string \"ERC1967Upgrade: unsupported proxiableUUID\""
                                        }
                                      ],
                                      "id": 27332,
                                      "name": "require",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -18,
                                        -18
                                      ],
                                      "referencedDeclaration": -18,
                                      "src": "3326:7:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (bool,string memory) pure"
                                      }
                                    },
                                    "id": 27337,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3326:82:7",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 27338,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3326:82:7"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 27340,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 27331,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 27330,
                                  "mutability": "mutable",
                                  "name": "slot",
                                  "nameLocation": "3302:4:7",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 27340,
                                  "src": "3294:12:7",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 27329,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3294:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "3293:14:7"
                            },
                            "src": "3285:138:7"
                          },
                          {
                            "block": {
                              "id": 27345,
                              "nodeType": "Block",
                              "src": "3430:89:7",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "hexValue": "45524331393637557067726164653a206e657720696d706c656d656e746174696f6e206973206e6f742055555053",
                                        "id": 27342,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3455:48:7",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        },
                                        "value": "ERC1967Upgrade: new implementation is not UUPS"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_stringliteral_8e8e2fbcb586f700b5b14e2c4a650c8d83b9773c31c5fe8962070ea544e11f24",
                                          "typeString": "literal_string \"ERC1967Upgrade: new implementation is not UUPS\""
                                        }
                                      ],
                                      "id": 27341,
                                      "name": "revert",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        -19,
                                        -19
                                      ],
                                      "referencedDeclaration": -19,
                                      "src": "3448:6:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                                        "typeString": "function (string memory) pure"
                                      }
                                    },
                                    "id": 27343,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3448:56:7",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 27344,
                                  "nodeType": "ExpressionStatement",
                                  "src": "3448:56:7"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 27346,
                            "nodeType": "TryCatchClause",
                            "src": "3424:95:7"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 27325,
                                  "name": "newImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 27307,
                                  "src": "3250:17:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 27324,
                                "name": "IERC1822Proxiable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 28636,
                                "src": "3232:17:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1822Proxiable_$28636_$",
                                  "typeString": "type(contract IERC1822Proxiable)"
                                }
                              },
                              "id": 27326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3232:36:7",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1822Proxiable_$28636",
                                "typeString": "contract IERC1822Proxiable"
                              }
                            },
                            "id": 27327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "proxiableUUID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 28635,
                            "src": "3232:50:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                              "typeString": "function () view external returns (bytes32)"
                            }
                          },
                          "id": 27328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3232:52:7",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 27347,
                        "nodeType": "TryStatement",
                        "src": "3228:291:7"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27349,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27307,
                              "src": "3550:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 27350,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27309,
                              "src": "3569:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 27351,
                              "name": "forceCall",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27311,
                              "src": "3575:9:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 27348,
                            "name": "_upgradeToAndCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27304,
                            "src": "3532:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                              "typeString": "function (address,bytes memory,bool)"
                            }
                          },
                          "id": 27352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3532:53:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27353,
                        "nodeType": "ExpressionStatement",
                        "src": "3532:53:7"
                      }
                    ]
                  },
                  "id": 27355,
                  "nodeType": "IfStatement",
                  "src": "3092:504:7",
                  "trueBody": {
                    "id": 27323,
                    "nodeType": "Block",
                    "src": "3146:62:7",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27320,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27307,
                              "src": "3179:17:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 27319,
                            "name": "_setImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27259,
                            "src": "3160:18:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 27321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3160:37:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 27322,
                        "nodeType": "ExpressionStatement",
                        "src": "3160:37:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27305,
              "nodeType": "StructuredDocumentation",
              "src": "2484:161:7",
              "text": " @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n Emits an {Upgraded} event."
            },
            "id": 27357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeToAndCallUUPS",
            "nameLocation": "2659:21:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27307,
                  "mutability": "mutable",
                  "name": "newImplementation",
                  "nameLocation": "2698:17:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27357,
                  "src": "2690:25:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27306,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2690:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27309,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2738:4:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27357,
                  "src": "2725:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27308,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2725:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27311,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "2757:9:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27357,
                  "src": "2752:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27310,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2752:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2680:92:7"
            },
            "returnParameters": {
              "id": 27313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2782:0:7"
            },
            "scope": 27521,
            "src": "2650:952:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 27358,
              "nodeType": "StructuredDocumentation",
              "src": "3608:189:7",
              "text": " @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n validated in the constructor."
            },
            "id": 27361,
            "mutability": "constant",
            "name": "_ADMIN_SLOT",
            "nameLocation": "3828:11:7",
            "nodeType": "VariableDeclaration",
            "scope": 27521,
            "src": "3802:106:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27359,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "3802:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033",
              "id": 27360,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3842:66:7",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1",
                "typeString": "int_const 8195...(69 digits omitted)...7091"
              },
              "value": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 27362,
              "nodeType": "StructuredDocumentation",
              "src": "3915:67:7",
              "text": " @dev Emitted when the admin account has changed."
            },
            "id": 27368,
            "name": "AdminChanged",
            "nameLocation": "3993:12:7",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 27367,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27364,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "previousAdmin",
                  "nameLocation": "4014:13:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27368,
                  "src": "4006:21:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27363,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4006:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27366,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4037:8:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27368,
                  "src": "4029:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27365,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4029:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4005:41:7"
            },
            "src": "3987:60:7"
          },
          {
            "body": {
              "id": 27380,
              "nodeType": "Block",
              "src": "4161:69:7",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 27376,
                          "name": "_ADMIN_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27361,
                          "src": "4205:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27374,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28706,
                          "src": "4178:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 27375,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28672,
                        "src": "4178:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 27377,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4178:39:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 27378,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28651,
                    "src": "4178:45:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 27373,
                  "id": 27379,
                  "nodeType": "Return",
                  "src": "4171:52:7"
                }
              ]
            },
            "documentation": {
              "id": 27369,
              "nodeType": "StructuredDocumentation",
              "src": "4053:50:7",
              "text": " @dev Returns the current admin."
            },
            "id": 27381,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getAdmin",
            "nameLocation": "4117:9:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27370,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4126:2:7"
            },
            "returnParameters": {
              "id": 27373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27372,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27381,
                  "src": "4152:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27371,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4152:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4151:9:7"
            },
            "scope": 27521,
            "src": "4108:122:7",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27406,
              "nodeType": "Block",
              "src": "4357:156:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 27393,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 27388,
                          "name": "newAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27384,
                          "src": "4375:8:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 27391,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4395:1:7",
                              "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": 27390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4387:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 27389,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4387:7:7",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 27392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4387:10:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4375:22:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061646472657373",
                        "id": 27394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4399:40:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        },
                        "value": "ERC1967: new admin is the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5",
                          "typeString": "literal_string \"ERC1967: new admin is the zero address\""
                        }
                      ],
                      "id": 27387,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4367:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4367:73:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27396,
                  "nodeType": "ExpressionStatement",
                  "src": "4367:73:7"
                },
                {
                  "expression": {
                    "id": 27404,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 27400,
                            "name": "_ADMIN_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27361,
                            "src": "4477:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 27397,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28706,
                            "src": "4450:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 27399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28672,
                          "src": "4450:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 27401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4450:39:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 27402,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28651,
                      "src": "4450:45:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27403,
                      "name": "newAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27384,
                      "src": "4498:8:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4450:56:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 27405,
                  "nodeType": "ExpressionStatement",
                  "src": "4450:56:7"
                }
              ]
            },
            "documentation": {
              "id": 27382,
              "nodeType": "StructuredDocumentation",
              "src": "4236:71:7",
              "text": " @dev Stores a new address in the EIP1967 admin slot."
            },
            "id": 27407,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setAdmin",
            "nameLocation": "4321:9:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27385,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27384,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4339:8:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27407,
                  "src": "4331:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27383,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4331:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4330:18:7"
            },
            "returnParameters": {
              "id": 27386,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4357:0:7"
            },
            "scope": 27521,
            "src": "4312:201:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27423,
              "nodeType": "Block",
              "src": "4673:86:7",
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 27414,
                          "name": "_getAdmin",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27381,
                          "src": "4701:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 27415,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4701:11:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 27416,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27410,
                        "src": "4714:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27413,
                      "name": "AdminChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27368,
                      "src": "4688:12:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 27417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4688:35:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27418,
                  "nodeType": "EmitStatement",
                  "src": "4683:40:7"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27420,
                        "name": "newAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27410,
                        "src": "4743:8:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27419,
                      "name": "_setAdmin",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27407,
                      "src": "4733:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27421,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4733:19:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27422,
                  "nodeType": "ExpressionStatement",
                  "src": "4733:19:7"
                }
              ]
            },
            "documentation": {
              "id": 27408,
              "nodeType": "StructuredDocumentation",
              "src": "4519:100:7",
              "text": " @dev Changes the admin of the proxy.\n Emits an {AdminChanged} event."
            },
            "id": 27424,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_changeAdmin",
            "nameLocation": "4633:12:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27411,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27410,
                  "mutability": "mutable",
                  "name": "newAdmin",
                  "nameLocation": "4654:8:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27424,
                  "src": "4646:16:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27409,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4646:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4645:18:7"
            },
            "returnParameters": {
              "id": 27412,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4673:0:7"
            },
            "scope": 27521,
            "src": "4624:135:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": true,
            "documentation": {
              "id": 27425,
              "nodeType": "StructuredDocumentation",
              "src": "4765:232:7",
              "text": " @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
            },
            "id": 27428,
            "mutability": "constant",
            "name": "_BEACON_SLOT",
            "nameLocation": "5028:12:7",
            "nodeType": "VariableDeclaration",
            "scope": 27521,
            "src": "5002:107:7",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 27426,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "5002:7:7",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "hexValue": "307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530",
              "id": 27427,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "5043:66:7",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1",
                "typeString": "int_const 7415...(69 digits omitted)...4704"
              },
              "value": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 27429,
              "nodeType": "StructuredDocumentation",
              "src": "5116:60:7",
              "text": " @dev Emitted when the beacon is upgraded."
            },
            "id": 27433,
            "name": "BeaconUpgraded",
            "nameLocation": "5187:14:7",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 27432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27431,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "beacon",
                  "nameLocation": "5218:6:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27433,
                  "src": "5202:22:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27430,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5202:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5201:24:7"
            },
            "src": "5181:45:7"
          },
          {
            "body": {
              "id": 27445,
              "nodeType": "Block",
              "src": "5342:70:7",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 27441,
                          "name": "_BEACON_SLOT",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27428,
                          "src": "5386:12:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 27439,
                          "name": "StorageSlot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28706,
                          "src": "5359:11:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                            "typeString": "type(library StorageSlot)"
                          }
                        },
                        "id": 27440,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getAddressSlot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 28672,
                        "src": "5359:26:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                          "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                        }
                      },
                      "id": 27442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5359:40:7",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                        "typeString": "struct StorageSlot.AddressSlot storage pointer"
                      }
                    },
                    "id": 27443,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 28651,
                    "src": "5359:46:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 27438,
                  "id": 27444,
                  "nodeType": "Return",
                  "src": "5352:53:7"
                }
              ]
            },
            "documentation": {
              "id": 27434,
              "nodeType": "StructuredDocumentation",
              "src": "5232:51:7",
              "text": " @dev Returns the current beacon."
            },
            "id": 27446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_getBeacon",
            "nameLocation": "5297:10:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27435,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5307:2:7"
            },
            "returnParameters": {
              "id": 27438,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27437,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 27446,
                  "src": "5333:7:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27436,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5333:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5332:9:7"
            },
            "scope": 27521,
            "src": "5288:124:7",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 27481,
              "nodeType": "Block",
              "src": "5541:324:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 27455,
                            "name": "newBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27449,
                            "src": "5578:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27453,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26374,
                            "src": "5559:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$26374_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 27454,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26097,
                          "src": "5559:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 27456,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5559:29:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a206e657720626561636f6e206973206e6f74206120636f6e7472616374",
                        "id": 27457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5590:39:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        },
                        "value": "ERC1967: new beacon is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470",
                          "typeString": "literal_string \"ERC1967: new beacon is not a contract\""
                        }
                      ],
                      "id": 27452,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5551:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5551:79:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27459,
                  "nodeType": "ExpressionStatement",
                  "src": "5551:79:7"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 27464,
                                    "name": "newBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 27449,
                                    "src": "5688:9:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 27463,
                                  "name": "IBeacon",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28646,
                                  "src": "5680:7:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IBeacon_$28646_$",
                                    "typeString": "type(contract IBeacon)"
                                  }
                                },
                                "id": 27465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5680:18:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IBeacon_$28646",
                                  "typeString": "contract IBeacon"
                                }
                              },
                              "id": 27466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "implementation",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 28645,
                              "src": "5680:33:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                "typeString": "function () view external returns (address)"
                              }
                            },
                            "id": 27467,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5680:35:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 27461,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26374,
                            "src": "5661:7:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$26374_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 27462,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26097,
                          "src": "5661:18:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 27468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5661:55:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "455243313936373a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374",
                        "id": 27469,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5730:50:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        },
                        "value": "ERC1967: beacon implementation is not a contract"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8",
                          "typeString": "literal_string \"ERC1967: beacon implementation is not a contract\""
                        }
                      ],
                      "id": 27460,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5640:7:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 27470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5640:150:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27471,
                  "nodeType": "ExpressionStatement",
                  "src": "5640:150:7"
                },
                {
                  "expression": {
                    "id": 27479,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 27475,
                            "name": "_BEACON_SLOT",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 27428,
                            "src": "5827:12:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 27472,
                            "name": "StorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28706,
                            "src": "5800:11:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_StorageSlot_$28706_$",
                              "typeString": "type(library StorageSlot)"
                            }
                          },
                          "id": 27474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "getAddressSlot",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 28672,
                          "src": "5800:26:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$28652_storage_ptr_$",
                            "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                          }
                        },
                        "id": 27476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5800:40:7",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot storage pointer"
                        }
                      },
                      "id": 27477,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28651,
                      "src": "5800:46:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 27478,
                      "name": "newBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27449,
                      "src": "5849:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "5800:58:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 27480,
                  "nodeType": "ExpressionStatement",
                  "src": "5800:58:7"
                }
              ]
            },
            "documentation": {
              "id": 27447,
              "nodeType": "StructuredDocumentation",
              "src": "5418:71:7",
              "text": " @dev Stores a new beacon in the EIP1967 beacon slot."
            },
            "id": 27482,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBeacon",
            "nameLocation": "5503:10:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27449,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "5522:9:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27482,
                  "src": "5514:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27448,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5514:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5513:19:7"
            },
            "returnParameters": {
              "id": 27451,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5541:0:7"
            },
            "scope": 27521,
            "src": "5494:371:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 27519,
              "nodeType": "Block",
              "src": "6294:217:7",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 27493,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27485,
                        "src": "6315:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27492,
                      "name": "_setBeacon",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27482,
                      "src": "6304:10:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6304:21:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27495,
                  "nodeType": "ExpressionStatement",
                  "src": "6304:21:7"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 27497,
                        "name": "newBeacon",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27485,
                        "src": "6355:9:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 27496,
                      "name": "BeaconUpgraded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27433,
                      "src": "6340:14:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 27498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6340:25:7",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 27499,
                  "nodeType": "EmitStatement",
                  "src": "6335:30:7"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 27505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 27503,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 27500,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 27487,
                          "src": "6379:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "6379:11:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 27502,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6393:1:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6379:15:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "id": 27504,
                      "name": "forceCall",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27489,
                      "src": "6398:9:7",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "6379:28:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 27518,
                  "nodeType": "IfStatement",
                  "src": "6375:130:7",
                  "trueBody": {
                    "id": 27517,
                    "nodeType": "Block",
                    "src": "6409:96:7",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 27510,
                                      "name": "newBeacon",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 27485,
                                      "src": "6460:9:7",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 27509,
                                    "name": "IBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 28646,
                                    "src": "6452:7:7",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IBeacon_$28646_$",
                                      "typeString": "type(contract IBeacon)"
                                    }
                                  },
                                  "id": 27511,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6452:18:7",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IBeacon_$28646",
                                    "typeString": "contract IBeacon"
                                  }
                                },
                                "id": 27512,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "implementation",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 28645,
                                "src": "6452:33:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                  "typeString": "function () view external returns (address)"
                                }
                              },
                              "id": 27513,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6452:35:7",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 27514,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 27487,
                              "src": "6489:4:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 27506,
                              "name": "Address",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 26374,
                              "src": "6423:7:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Address_$26374_$",
                                "typeString": "type(library Address)"
                              }
                            },
                            "id": 27508,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "functionDelegateCall",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 26307,
                            "src": "6423:28:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory) returns (bytes memory)"
                            }
                          },
                          "id": 27515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6423:71:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 27516,
                        "nodeType": "ExpressionStatement",
                        "src": "6423:71:7"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 27483,
              "nodeType": "StructuredDocumentation",
              "src": "5871:292:7",
              "text": " @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n Emits a {BeaconUpgraded} event."
            },
            "id": 27520,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_upgradeBeaconToAndCall",
            "nameLocation": "6177:23:7",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 27490,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 27485,
                  "mutability": "mutable",
                  "name": "newBeacon",
                  "nameLocation": "6218:9:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27520,
                  "src": "6210:17:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 27484,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6210:7:7",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27487,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6250:4:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27520,
                  "src": "6237:17:7",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 27486,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6237:5:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 27489,
                  "mutability": "mutable",
                  "name": "forceCall",
                  "nameLocation": "6269:9:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 27520,
                  "src": "6264:14:7",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 27488,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6264:4:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6200:84:7"
            },
            "returnParameters": {
              "id": 27491,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6294:0:7"
            },
            "scope": 27521,
            "src": "6168:343:7",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 27522,
        "src": "529:5984:7"
      }
    ],
    "src": "116:6398:7"
  },
  "bytecode": "",
  "bytecodeSha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "ERC1967Upgrade",
  "coverageMap": {
    "branches": {},
    "statements": {}
  },
  "dependencies": [
    "OpenZeppelin/openzeppelin-contracts@4.7.3/Address",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IBeacon",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/IERC1822Proxiable",
    "OpenZeppelin/openzeppelin-contracts@4.7.3/StorageSlot"
  ],
  "deployedBytecode": "",
  "deployedSourceMap": "",
  "language": "Solidity",
  "natspec": {
    "custom:oz-upgrades-unsafe-allow": "delegatecall",
    "details": "This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._",
    "events": {
      "AdminChanged(address,address)": {
        "details": "Emitted when the admin account has changed."
      },
      "BeaconUpgraded(address)": {
        "details": "Emitted when the beacon is upgraded."
      },
      "Upgraded(address)": {
        "details": "Emitted when the implementation is upgraded."
      }
    },
    "kind": "dev",
    "methods": {},
    "stateVariables": {
      "_ADMIN_SLOT": {
        "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor."
      },
      "_BEACON_SLOT": {
        "details": "The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor."
      },
      "_IMPLEMENTATION_SLOT": {
        "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor."
      }
    },
    "version": 1
  },
  "offset": [
    529,
    6513
  ],
  "opcodes": "",
  "pcMap": {},
  "sha1": "7134c7dc6d62c58f424d4fe3bf4c3c98bdf180ba",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n    // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n    bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function _getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Perform implementation upgrade\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeTo(address newImplementation) internal {\n        _setImplementation(newImplementation);\n        emit Upgraded(newImplementation);\n    }\n\n    /**\n     * @dev Perform implementation upgrade with additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCall(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _upgradeTo(newImplementation);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(newImplementation, data);\n        }\n    }\n\n    /**\n     * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n     *\n     * Emits an {Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(\n        address newImplementation,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        // Upgrades from old implementations will perform a rollback test. This test requires the new\n        // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n        // this special case will break upgrade paths from old UUPS implementation to new ones.\n        if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n            _setImplementation(newImplementation);\n        } else {\n            try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n                require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n            } catch {\n                revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n            }\n            _upgradeToAndCall(newImplementation, data, forceCall);\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n     * validated in the constructor.\n     */\n    bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Returns the current admin.\n     */\n    function _getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the EIP1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n        StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {AdminChanged} event.\n     */\n    function _changeAdmin(address newAdmin) internal {\n        emit AdminChanged(_getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n     */\n    bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Emitted when the beacon is upgraded.\n     */\n    event BeaconUpgraded(address indexed beacon);\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function _getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the EIP1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n        require(\n            Address.isContract(IBeacon(newBeacon).implementation()),\n            \"ERC1967: beacon implementation is not a contract\"\n        );\n        StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n    }\n\n    /**\n     * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n     * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n     *\n     * Emits a {BeaconUpgraded} event.\n     */\n    function _upgradeBeaconToAndCall(\n        address newBeacon,\n        bytes memory data,\n        bool forceCall\n    ) internal {\n        _setBeacon(newBeacon);\n        emit BeaconUpgraded(newBeacon);\n        if (data.length > 0 || forceCall) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        }\n    }\n}\n",
  "sourceMap": "",
  "sourcePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/proxy/ERC1967/ERC1967Upgrade.sol",
  "type": "contract"
}