{
  "contractName": "Clonable2",
  "abi": [
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "by",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "master",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "clone",
          "type": "address"
        }
      ],
      "name": "Cloned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "base",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cloned",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialized",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "master",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "target",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"master\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"Cloned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"base\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cloned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"master\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"target\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cloned()\":{\"notice\":\"Tells whether this contract is a clone of `self()`\"},\"initialized()\":{\"notice\":\"Tells whether this instance has been initialized.\"},\"master()\":{\"notice\":\"Master address from which this contract was cloned.\"},\"target()\":{\"notice\":\"Contract address to which clones will be re-directed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/patterns/Clonable2.sol\":\"Clonable2\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"project:/contracts/patterns/Clonable2.sol\":{\"keccak256\":\"0x0d172b4ef56dd80035ceb74242fa4f6f21c2d5a7246972cc42b9e5cfb5429caa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51378ccc024a39b8b802165c65d6539f04534671263d97e61cc28fc1497186c6\",\"dweb:/ipfs/QmXGGY9bbJJ8gARfQkjtcueRNziC8Dop9XjUBnYj4RXLio\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.20 <0.9.0;\r\n\r\nimport \"./Initializable.sol\";\r\n\r\nabstract contract Clonable2\r\n    is\r\n        Initializable\r\n{\r\n    address immutable internal __SELF = address(this);\r\n\r\n    event Cloned(address indexed by, address indexed master, address indexed clone);\r\n\r\n    modifier onlyOnClones virtual {\r\n        require(cloned(), \"Clonable2: only on clones\");\r\n        _;\r\n    }\r\n\r\n    modifier notOnClones virtual {\r\n        require(!cloned(), \"Clonable2: not on clones\"); \r\n        _;\r\n    }\r\n\r\n    modifier wasInitialized {\r\n        require(initialized(), \"Clonable2: not initialized\");\r\n        _;\r\n    }\r\n\r\n    function base() virtual public view returns (address) {\r\n        return __SELF;\r\n    }\r\n\r\n    /// @notice Tells whether this contract is a clone of `self()`\r\n    function cloned()\r\n        virtual public view\r\n        returns (bool)\r\n    {\r\n        return address(this) != __SELF;\r\n    }\r\n\r\n    /// @notice Tells whether this instance has been initialized.\r\n    function initialized() virtual public view returns (bool);\r\n\r\n    /// @notice Master address from which this contract was cloned.\r\n    function master() virtual public view returns (address) {\r\n        return __clonable2().master;\r\n    }\r\n\r\n    /// @notice Contract address to which clones will be re-directed.\r\n    function target() virtual public view returns (address) {\r\n        return cloned() ? address(0) : __SELF;\r\n    }\r\n\r\n    /// Virtual method to be called upon new cloned instances.\r\n    function __initializeClone(address _master) virtual internal {\r\n        __clonable2().master = _master; \r\n    }\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract\r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function should always provide a new address, no matter how many times \r\n    /// @dev is actually called from the same `msg.sender`.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function __clone()\r\n        internal\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE new instance:\r\n            _instance := create(0, ptr, 0x37)\r\n        }        \r\n        require(_instance != address(0), \"Clonable2: CREATE failed\");\r\n        emit Cloned(msg.sender, target(), _instance);\r\n    }\r\n\r\n    /// Deploys and returns the address of a minimal proxy clone that replicates contract \r\n    /// behaviour while using its own EVM storage.\r\n    /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\r\n    /// @dev the clone. Using the same `_salt` multiple times will revert, since\r\n    /// @dev no contract can be deployed more than once at the same address.\r\n    /// @dev See https://eips.ethereum.org/EIPS/eip-1167.\r\n    /// @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/.\r\n    function __cloneDeterministic(bytes32 _salt)\r\n        internal\r\n        notOnClones\r\n        returns (address _instance)\r\n    {\r\n        bytes memory ptr = _cloneBytecodePtr();\r\n        assembly {\r\n            // CREATE2 new instance:\r\n            _instance := create2(0, ptr, 0x37, _salt)\r\n        }\r\n        require(_instance != address(0), \"Clonable2: CREATE2 failed\");\r\n        emit Cloned(msg.sender, target(), _instance);\r\n    }\r\n\r\n    /// @notice Returns minimal proxy's deploy bytecode.\r\n    function _cloneBytecode()\r\n        private view\r\n        returns (bytes memory)\r\n    {\r\n        return abi.encodePacked(\r\n            hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\",\r\n            bytes20(target()),\r\n            hex\"5af43d82803e903d91602b57fd5bf3\"\r\n        );\r\n    }\r\n\r\n    /// @notice Returns mem pointer to minimal proxy's deploy bytecode.\r\n    function _cloneBytecodePtr()\r\n        private view\r\n        returns (bytes memory ptr)\r\n    {\r\n        address _target = target();\r\n        assembly {\r\n            // ptr to free mem:\r\n            ptr := mload(0x40)\r\n            // begin minimal proxy construction bytecode:\r\n            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\r\n            // make minimal proxy delegate all calls to `target()`:\r\n            mstore(add(ptr, 0x14), shl(0x60, _target))\r\n            // end minimal proxy construction bytecode:\r\n            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\r\n        }\r\n    }\r\n\r\n    struct Storage {\r\n        address master;\r\n    }\r\n\r\n    function __clonable2() internal pure returns (Storage storage clonable) {\r\n        assembly {\r\n            // bytes32(uint256(keccak256('eip1967.clonable.master')) & ~bytes32(uint256(0xff)\r\n            clonable.slot := 0x033dcaf396f361642869bf1bdf9c3454888f3e9bbf7939acdd2e40c3833fef00\r\n        }\r\n    }\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\patterns\\Clonable2.sol",
  "ast": {
    "absolutePath": "project:/contracts/patterns/Clonable2.sol",
    "exportedSymbols": {
      "Clonable2": [
        45417
      ],
      "Initializable": [
        267
      ]
    },
    "id": 45418,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 45192,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".20",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:32:124"
      },
      {
        "absolutePath": "project:/contracts/patterns/Initializable.sol",
        "file": "./Initializable.sol",
        "id": 45193,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 45418,
        "sourceUnit": 45521,
        "src": "71:29:124",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": true,
        "baseContracts": [
          {
            "baseName": {
              "id": 45194,
              "name": "Initializable",
              "nameLocations": [
                "149:13:124"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 267,
              "src": "149:13:124"
            },
            "id": 45195,
            "nodeType": "InheritanceSpecifier",
            "src": "149:13:124"
          }
        ],
        "canonicalName": "Clonable2",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": false,
        "id": 45417,
        "linearizedBaseContracts": [
          45417,
          267
        ],
        "name": "Clonable2",
        "nameLocation": "122:9:124",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 45201,
            "mutability": "immutable",
            "name": "__SELF",
            "nameLocation": "198:6:124",
            "nodeType": "VariableDeclaration",
            "scope": 45417,
            "src": "171:49:124",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 45196,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "171:7:124",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "id": 45199,
                  "name": "this",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4294967268,
                  "src": "215:4:124",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Clonable2_$45417",
                    "typeString": "contract Clonable2"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_contract$_Clonable2_$45417",
                    "typeString": "contract Clonable2"
                  }
                ],
                "id": 45198,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "207:7:124",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 45197,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "207:7:124",
                  "typeDescriptions": {}
                }
              },
              "id": 45200,
              "isConstant": false,
              "isLValue": false,
              "isPure": false,
              "kind": "typeConversion",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "207:13:124",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "anonymous": false,
            "eventSelector": "f376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc248",
            "id": 45209,
            "name": "Cloned",
            "nameLocation": "235:6:124",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 45208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45203,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "by",
                  "nameLocation": "258:2:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45209,
                  "src": "242:18:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45202,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "242:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45205,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "master",
                  "nameLocation": "278:6:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45209,
                  "src": "262:22:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45204,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "262:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 45207,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "clone",
                  "nameLocation": "302:5:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45209,
                  "src": "286:21:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45206,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "286:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "241:67:124"
            },
            "src": "229:80:124"
          },
          {
            "body": {
              "id": 45218,
              "nodeType": "Block",
              "src": "347:77:124",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45212,
                          "name": "cloned",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45262,
                          "src": "366:6:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 45213,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "366:8:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c65323a206f6e6c79206f6e20636c6f6e6573",
                        "id": 45214,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "376:27:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cb0f4f0952b6e8163e47c54b60198339d077c9d234e096d830e0e50956f02ac7",
                          "typeString": "literal_string \"Clonable2: only on clones\""
                        },
                        "value": "Clonable2: only on clones"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cb0f4f0952b6e8163e47c54b60198339d077c9d234e096d830e0e50956f02ac7",
                          "typeString": "literal_string \"Clonable2: only on clones\""
                        }
                      ],
                      "id": 45211,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "358:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "358:46:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45216,
                  "nodeType": "ExpressionStatement",
                  "src": "358:46:124"
                },
                {
                  "id": 45217,
                  "nodeType": "PlaceholderStatement",
                  "src": "415:1:124"
                }
              ]
            },
            "id": 45219,
            "name": "onlyOnClones",
            "nameLocation": "326:12:124",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45210,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "339:0:124"
            },
            "src": "317:107:124",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45229,
              "nodeType": "Block",
              "src": "461:78:124",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 45224,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "480:9:124",
                        "subExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 45222,
                            "name": "cloned",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 45262,
                            "src": "481:6:124",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 45223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "481:8:124",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c65323a206e6f74206f6e20636c6f6e6573",
                        "id": 45225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "491:26:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ceac1fd756e0c5b73e56786881ceba2dc475723057c1e4b6d95d0789e36b55f9",
                          "typeString": "literal_string \"Clonable2: not on clones\""
                        },
                        "value": "Clonable2: not on clones"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ceac1fd756e0c5b73e56786881ceba2dc475723057c1e4b6d95d0789e36b55f9",
                          "typeString": "literal_string \"Clonable2: not on clones\""
                        }
                      ],
                      "id": 45221,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "472:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45226,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "472:46:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45227,
                  "nodeType": "ExpressionStatement",
                  "src": "472:46:124"
                },
                {
                  "id": 45228,
                  "nodeType": "PlaceholderStatement",
                  "src": "530:1:124"
                }
              ]
            },
            "id": 45230,
            "name": "notOnClones",
            "nameLocation": "441:11:124",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45220,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "453:0:124"
            },
            "src": "432:107:124",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45239,
              "nodeType": "Block",
              "src": "571:83:124",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45233,
                          "name": "initialized",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45268,
                          "src": "590:11:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                            "typeString": "function () view returns (bool)"
                          }
                        },
                        "id": 45234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "590:13:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c65323a206e6f7420696e697469616c697a6564",
                        "id": 45235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "605:28:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_721311a2f08e60a5da3521f68ccd4d528baf4a2096a7c111b9620b1dfa66df56",
                          "typeString": "literal_string \"Clonable2: not initialized\""
                        },
                        "value": "Clonable2: not initialized"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_721311a2f08e60a5da3521f68ccd4d528baf4a2096a7c111b9620b1dfa66df56",
                          "typeString": "literal_string \"Clonable2: not initialized\""
                        }
                      ],
                      "id": 45232,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "582:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "582:52:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45237,
                  "nodeType": "ExpressionStatement",
                  "src": "582:52:124"
                },
                {
                  "id": 45238,
                  "nodeType": "PlaceholderStatement",
                  "src": "645:1:124"
                }
              ]
            },
            "id": 45240,
            "name": "wasInitialized",
            "nameLocation": "556:14:124",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 45231,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "571:0:124"
            },
            "src": "547:107:124",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45247,
              "nodeType": "Block",
              "src": "716:32:124",
              "statements": [
                {
                  "expression": {
                    "id": 45245,
                    "name": "__SELF",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 45201,
                    "src": "734:6:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 45244,
                  "id": 45246,
                  "nodeType": "Return",
                  "src": "727:13:124"
                }
              ]
            },
            "functionSelector": "5001f3b5",
            "id": 45248,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "base",
            "nameLocation": "671:4:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45241,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "675:2:124"
            },
            "returnParameters": {
              "id": 45244,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45243,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45248,
                  "src": "707:7:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "707:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "706:9:124"
            },
            "scope": 45417,
            "src": "662:86:124",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45261,
              "nodeType": "Block",
              "src": "900:49:124",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 45259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 45256,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967268,
                          "src": "926:4:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Clonable2_$45417",
                            "typeString": "contract Clonable2"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_Clonable2_$45417",
                            "typeString": "contract Clonable2"
                          }
                        ],
                        "id": 45255,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "918:7:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 45254,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "918:7:124",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 45257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "918:13:124",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 45258,
                      "name": "__SELF",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45201,
                      "src": "935:6:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "918:23:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 45253,
                  "id": 45260,
                  "nodeType": "Return",
                  "src": "911:30:124"
                }
              ]
            },
            "documentation": {
              "id": 45249,
              "nodeType": "StructuredDocumentation",
              "src": "756:62:124",
              "text": "@notice Tells whether this contract is a clone of `self()`"
            },
            "functionSelector": "a04daef0",
            "id": 45262,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "cloned",
            "nameLocation": "833:6:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "839:2:124"
            },
            "returnParameters": {
              "id": 45253,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45252,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45262,
                  "src": "889:4:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45251,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "889:4:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "888:6:124"
            },
            "scope": 45417,
            "src": "824:125:124",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 45263,
              "nodeType": "StructuredDocumentation",
              "src": "957:61:124",
              "text": "@notice Tells whether this instance has been initialized."
            },
            "functionSelector": "158ef93e",
            "id": 45268,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "initialized",
            "nameLocation": "1033:11:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45264,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1044:2:124"
            },
            "returnParameters": {
              "id": 45267,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45266,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45268,
                  "src": "1076:4:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 45265,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1076:4:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1075:6:124"
            },
            "scope": 45417,
            "src": "1024:58:124",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45278,
              "nodeType": "Block",
              "src": "1215:46:124",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 45274,
                        "name": "__clonable2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45416,
                        "src": "1233:11:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Storage_$45408_storage_ptr_$",
                          "typeString": "function () pure returns (struct Clonable2.Storage storage pointer)"
                        }
                      },
                      "id": 45275,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1233:13:124",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Storage_$45408_storage_ptr",
                        "typeString": "struct Clonable2.Storage storage pointer"
                      }
                    },
                    "id": 45276,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "1247:6:124",
                    "memberName": "master",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 45407,
                    "src": "1233:20:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 45273,
                  "id": 45277,
                  "nodeType": "Return",
                  "src": "1226:27:124"
                }
              ]
            },
            "documentation": {
              "id": 45269,
              "nodeType": "StructuredDocumentation",
              "src": "1090:63:124",
              "text": "@notice Master address from which this contract was cloned."
            },
            "functionSelector": "ee97f7f3",
            "id": 45279,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "master",
            "nameLocation": "1168:6:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45270,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1174:2:124"
            },
            "returnParameters": {
              "id": 45273,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45272,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45279,
                  "src": "1206:7:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45271,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1206:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1205:9:124"
            },
            "scope": 45417,
            "src": "1159:102:124",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45294,
              "nodeType": "Block",
              "src": "1396:56:124",
              "statements": [
                {
                  "expression": {
                    "condition": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 45285,
                        "name": "cloned",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45262,
                        "src": "1414:6:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                          "typeString": "function () view returns (bool)"
                        }
                      },
                      "id": 45286,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1414:8:124",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "id": 45291,
                      "name": "__SELF",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45201,
                      "src": "1438:6:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 45292,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1414:30:124",
                    "trueExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 45289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1433:1:124",
                          "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": 45288,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1425:7:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 45287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1425:7:124",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 45290,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1425:10:124",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 45284,
                  "id": 45293,
                  "nodeType": "Return",
                  "src": "1407:37:124"
                }
              ]
            },
            "documentation": {
              "id": 45280,
              "nodeType": "StructuredDocumentation",
              "src": "1269:65:124",
              "text": "@notice Contract address to which clones will be re-directed."
            },
            "functionSelector": "d4b83992",
            "id": 45295,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "target",
            "nameLocation": "1349:6:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45281,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1355:2:124"
            },
            "returnParameters": {
              "id": 45284,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45283,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45295,
                  "src": "1387:7:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45282,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1387:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1386:9:124"
            },
            "scope": 45417,
            "src": "1340:112:124",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 45307,
              "nodeType": "Block",
              "src": "1585:50:124",
              "statements": [
                {
                  "expression": {
                    "id": 45305,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45301,
                          "name": "__clonable2",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45416,
                          "src": "1596:11:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Storage_$45408_storage_ptr_$",
                            "typeString": "function () pure returns (struct Clonable2.Storage storage pointer)"
                          }
                        },
                        "id": 45302,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1596:13:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Storage_$45408_storage_ptr",
                          "typeString": "struct Clonable2.Storage storage pointer"
                        }
                      },
                      "id": 45303,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "1610:6:124",
                      "memberName": "master",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45407,
                      "src": "1596:20:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 45304,
                      "name": "_master",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45298,
                      "src": "1619:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1596:30:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 45306,
                  "nodeType": "ExpressionStatement",
                  "src": "1596:30:124"
                }
              ]
            },
            "documentation": {
              "id": 45296,
              "nodeType": "StructuredDocumentation",
              "src": "1460:58:124",
              "text": "Virtual method to be called upon new cloned instances."
            },
            "id": 45308,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__initializeClone",
            "nameLocation": "1533:17:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45298,
                  "mutability": "mutable",
                  "name": "_master",
                  "nameLocation": "1559:7:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45308,
                  "src": "1551:15:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45297,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1551:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1550:17:124"
            },
            "returnParameters": {
              "id": 45300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1585:0:124"
            },
            "scope": 45417,
            "src": "1524:111:124",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45338,
              "nodeType": "Block",
              "src": "2168:306:124",
              "statements": [
                {
                  "assignments": [
                    45315
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45315,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "2192:3:124",
                      "nodeType": "VariableDeclaration",
                      "scope": 45338,
                      "src": "2179:16:124",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45314,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2179:5:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45318,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45316,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45405,
                      "src": "2198:17:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 45317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2198:19:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2179:38:124"
                },
                {
                  "AST": {
                    "nativeSrc": "2237:96:124",
                    "nodeType": "YulBlock",
                    "src": "2237:96:124",
                    "statements": [
                      {
                        "nativeSrc": "2289:33:124",
                        "nodeType": "YulAssignment",
                        "src": "2289:33:124",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2309:1:124",
                              "nodeType": "YulLiteral",
                              "src": "2309:1:124",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "2312:3:124",
                              "nodeType": "YulIdentifier",
                              "src": "2312:3:124"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2317:4:124",
                              "nodeType": "YulLiteral",
                              "src": "2317:4:124",
                              "type": "",
                              "value": "0x37"
                            }
                          ],
                          "functionName": {
                            "name": "create",
                            "nativeSrc": "2302:6:124",
                            "nodeType": "YulIdentifier",
                            "src": "2302:6:124"
                          },
                          "nativeSrc": "2302:20:124",
                          "nodeType": "YulFunctionCall",
                          "src": "2302:20:124"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "2289:9:124",
                            "nodeType": "YulIdentifier",
                            "src": "2289:9:124"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45312,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2289:9:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45315,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2312:3:124",
                      "valueSize": 1
                    }
                  ],
                  "id": 45319,
                  "nodeType": "InlineAssembly",
                  "src": "2228:105:124"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45326,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 45321,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45312,
                          "src": "2359:9:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 45324,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2380:1:124",
                              "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": 45323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2372:7:124",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 45322,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2372:7:124",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45325,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2372:10:124",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2359:23:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c65323a20435245415445206661696c6564",
                        "id": 45327,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2384:26:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5f4f2ad90f849f749d50bb3263a8c0718cf384ca93b26afc798f4322149955ce",
                          "typeString": "literal_string \"Clonable2: CREATE failed\""
                        },
                        "value": "Clonable2: CREATE failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5f4f2ad90f849f749d50bb3263a8c0718cf384ca93b26afc798f4322149955ce",
                          "typeString": "literal_string \"Clonable2: CREATE failed\""
                        }
                      ],
                      "id": 45320,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "2351:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45328,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2351:60:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45329,
                  "nodeType": "ExpressionStatement",
                  "src": "2351:60:124"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 45331,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "2434:3:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 45332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2438:6:124",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "2434:10:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45333,
                          "name": "target",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45295,
                          "src": "2446:6:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 45334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2446:8:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45335,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45312,
                        "src": "2456:9:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 45330,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45209,
                      "src": "2427:6:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 45336,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2427:39:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45337,
                  "nodeType": "EmitStatement",
                  "src": "2422:44:124"
                }
              ]
            },
            "documentation": {
              "id": 45309,
              "nodeType": "StructuredDocumentation",
              "src": "1643:440:124",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract\n behaviour while using its own EVM storage.\n @dev This function should always provide a new address, no matter how many times \n @dev is actually called from the same `msg.sender`.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 45339,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__clone",
            "nameLocation": "2098:7:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45310,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2105:2:124"
            },
            "returnParameters": {
              "id": 45313,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45312,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "2152:9:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45339,
                  "src": "2144:17:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45311,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2144:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2143:19:124"
            },
            "scope": 45417,
            "src": "2089:385:124",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45373,
              "nodeType": "Block",
              "src": "3157:308:124",
              "statements": [
                {
                  "assignments": [
                    45350
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45350,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nameLocation": "3181:3:124",
                      "nodeType": "VariableDeclaration",
                      "scope": 45373,
                      "src": "3168:16:124",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 45349,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3168:5:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45353,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45351,
                      "name": "_cloneBytecodePtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45405,
                      "src": "3187:17:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () view returns (bytes memory)"
                      }
                    },
                    "id": 45352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3187:19:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3168:38:124"
                },
                {
                  "AST": {
                    "nativeSrc": "3226:105:124",
                    "nodeType": "YulBlock",
                    "src": "3226:105:124",
                    "statements": [
                      {
                        "nativeSrc": "3279:41:124",
                        "nodeType": "YulAssignment",
                        "src": "3279:41:124",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3300:1:124",
                              "nodeType": "YulLiteral",
                              "src": "3300:1:124",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "name": "ptr",
                              "nativeSrc": "3303:3:124",
                              "nodeType": "YulIdentifier",
                              "src": "3303:3:124"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3308:4:124",
                              "nodeType": "YulLiteral",
                              "src": "3308:4:124",
                              "type": "",
                              "value": "0x37"
                            },
                            {
                              "name": "_salt",
                              "nativeSrc": "3314:5:124",
                              "nodeType": "YulIdentifier",
                              "src": "3314:5:124"
                            }
                          ],
                          "functionName": {
                            "name": "create2",
                            "nativeSrc": "3292:7:124",
                            "nodeType": "YulIdentifier",
                            "src": "3292:7:124"
                          },
                          "nativeSrc": "3292:28:124",
                          "nodeType": "YulFunctionCall",
                          "src": "3292:28:124"
                        },
                        "variableNames": [
                          {
                            "name": "_instance",
                            "nativeSrc": "3279:9:124",
                            "nodeType": "YulIdentifier",
                            "src": "3279:9:124"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45347,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3279:9:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45342,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3314:5:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45350,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3303:3:124",
                      "valueSize": 1
                    }
                  ],
                  "id": 45354,
                  "nodeType": "InlineAssembly",
                  "src": "3217:114:124"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 45361,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 45356,
                          "name": "_instance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45347,
                          "src": "3349:9:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 45359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3370:1:124",
                              "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": 45358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3362:7:124",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 45357,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3362:7:124",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 45360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3362:10:124",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3349:23:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436c6f6e61626c65323a2043524541544532206661696c6564",
                        "id": 45362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3374:27:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b9eaaa363c8842f3f19ac193ef61cf120fa5a7a6958631966f78cb27655f363d",
                          "typeString": "literal_string \"Clonable2: CREATE2 failed\""
                        },
                        "value": "Clonable2: CREATE2 failed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b9eaaa363c8842f3f19ac193ef61cf120fa5a7a6958631966f78cb27655f363d",
                          "typeString": "literal_string \"Clonable2: CREATE2 failed\""
                        }
                      ],
                      "id": 45355,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3341:7:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 45363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3341:61:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45364,
                  "nodeType": "ExpressionStatement",
                  "src": "3341:61:124"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 45366,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "3425:3:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 45367,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "3429:6:124",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3425:10:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 45368,
                          "name": "target",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45295,
                          "src": "3437:6:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 45369,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3437:8:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 45370,
                        "name": "_instance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45347,
                        "src": "3447:9:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 45365,
                      "name": "Cloned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45209,
                      "src": "3418:6:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address,address)"
                      }
                    },
                    "id": 45371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3418:39:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 45372,
                  "nodeType": "EmitStatement",
                  "src": "3413:44:124"
                }
              ]
            },
            "documentation": {
              "id": 45340,
              "nodeType": "StructuredDocumentation",
              "src": "2482:543:124",
              "text": "Deploys and returns the address of a minimal proxy clone that replicates contract \n behaviour while using its own EVM storage.\n @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy\n @dev the clone. Using the same `_salt` multiple times will revert, since\n @dev no contract can be deployed more than once at the same address.\n @dev See https://eips.ethereum.org/EIPS/eip-1167.\n @dev See https://blog.openzeppelin.com/deep-dive-into-the-minimal-proxy-contract/."
            },
            "id": 45374,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 45345,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 45344,
                  "name": "notOnClones",
                  "nameLocations": [
                    "3103:11:124"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 45230,
                  "src": "3103:11:124"
                },
                "nodeType": "ModifierInvocation",
                "src": "3103:11:124"
              }
            ],
            "name": "__cloneDeterministic",
            "nameLocation": "3040:20:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45343,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45342,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "3069:5:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45374,
                  "src": "3061:13:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 45341,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3061:7:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3060:15:124"
            },
            "returnParameters": {
              "id": 45348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45347,
                  "mutability": "mutable",
                  "name": "_instance",
                  "nameLocation": "3141:9:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45374,
                  "src": "3133:17:124",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 45346,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3133:7:124",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3132:19:124"
            },
            "scope": 45417,
            "src": "3031:434:124",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 45391,
              "nodeType": "Block",
              "src": "3616:195:124",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3d602d80600a3d3981f3363d3d373d3d3d363d73",
                        "id": 45382,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3665:45:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 45385,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 45295,
                              "src": "3733:6:124",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 45386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3733:8:124",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 45384,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3725:7:124",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes20_$",
                            "typeString": "type(bytes20)"
                          },
                          "typeName": {
                            "id": 45383,
                            "name": "bytes20",
                            "nodeType": "ElementaryTypeName",
                            "src": "3725:7:124",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 45387,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3725:17:124",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      {
                        "hexValue": "5af43d82803e903d91602b57fd5bf3",
                        "id": 45388,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "hexString",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3757:35:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_72307939328b75c6e301a012c75e0a4e690a99036b95f6e6f4f1b5aba02a9ce4",
                          "typeString": "literal_string hex\"3d602d80600a3d3981f3363d3d373d3d3d363d73\""
                        },
                        {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11a195f66c9175f46895bae2006d40848a680c7068b9fc4af248ff9a54a47e45",
                          "typeString": "literal_string hex\"5af43d82803e903d91602b57fd5bf3\""
                        }
                      ],
                      "expression": {
                        "id": 45380,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "3634:3:124",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 45381,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "3638:12:124",
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "src": "3634:16:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 45389,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3634:169:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 45379,
                  "id": 45390,
                  "nodeType": "Return",
                  "src": "3627:176:124"
                }
              ]
            },
            "documentation": {
              "id": 45375,
              "nodeType": "StructuredDocumentation",
              "src": "3473:52:124",
              "text": "@notice Returns minimal proxy's deploy bytecode."
            },
            "id": 45392,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecode",
            "nameLocation": "3540:14:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3554:2:124"
            },
            "returnParameters": {
              "id": 45379,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45378,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 45392,
                  "src": "3597:12:124",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45377,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3597:5:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3596:14:124"
            },
            "scope": 45417,
            "src": "3531:280:124",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 45404,
              "nodeType": "Block",
              "src": "3984:579:124",
              "statements": [
                {
                  "assignments": [
                    45399
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 45399,
                      "mutability": "mutable",
                      "name": "_target",
                      "nameLocation": "4003:7:124",
                      "nodeType": "VariableDeclaration",
                      "scope": 45404,
                      "src": "3995:15:124",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 45398,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "3995:7:124",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 45402,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 45400,
                      "name": "target",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 45295,
                      "src": "4013:6:124",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 45401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4013:8:124",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3995:26:124"
                },
                {
                  "AST": {
                    "nativeSrc": "4041:515:124",
                    "nodeType": "YulBlock",
                    "src": "4041:515:124",
                    "statements": [
                      {
                        "nativeSrc": "4089:18:124",
                        "nodeType": "YulAssignment",
                        "src": "4089:18:124",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "4102:4:124",
                              "nodeType": "YulLiteral",
                              "src": "4102:4:124",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nativeSrc": "4096:5:124",
                            "nodeType": "YulIdentifier",
                            "src": "4096:5:124"
                          },
                          "nativeSrc": "4096:11:124",
                          "nodeType": "YulFunctionCall",
                          "src": "4096:11:124"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nativeSrc": "4089:3:124",
                            "nodeType": "YulIdentifier",
                            "src": "4089:3:124"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nativeSrc": "4187:3:124",
                              "nodeType": "YulIdentifier",
                              "src": "4187:3:124"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4192:66:124",
                              "nodeType": "YulLiteral",
                              "src": "4192:66:124",
                              "type": "",
                              "value": "0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4180:6:124",
                            "nodeType": "YulIdentifier",
                            "src": "4180:6:124"
                          },
                          "nativeSrc": "4180:79:124",
                          "nodeType": "YulFunctionCall",
                          "src": "4180:79:124"
                        },
                        "nativeSrc": "4180:79:124",
                        "nodeType": "YulExpressionStatement",
                        "src": "4180:79:124"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "4353:3:124",
                                  "nodeType": "YulIdentifier",
                                  "src": "4353:3:124"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "4358:4:124",
                                  "nodeType": "YulLiteral",
                                  "src": "4358:4:124",
                                  "type": "",
                                  "value": "0x14"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "4349:3:124",
                                "nodeType": "YulIdentifier",
                                "src": "4349:3:124"
                              },
                              "nativeSrc": "4349:14:124",
                              "nodeType": "YulFunctionCall",
                              "src": "4349:14:124"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nativeSrc": "4369:4:124",
                                  "nodeType": "YulLiteral",
                                  "src": "4369:4:124",
                                  "type": "",
                                  "value": "0x60"
                                },
                                {
                                  "name": "_target",
                                  "nativeSrc": "4375:7:124",
                                  "nodeType": "YulIdentifier",
                                  "src": "4375:7:124"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nativeSrc": "4365:3:124",
                                "nodeType": "YulIdentifier",
                                "src": "4365:3:124"
                              },
                              "nativeSrc": "4365:18:124",
                              "nodeType": "YulFunctionCall",
                              "src": "4365:18:124"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4342:6:124",
                            "nodeType": "YulIdentifier",
                            "src": "4342:6:124"
                          },
                          "nativeSrc": "4342:42:124",
                          "nodeType": "YulFunctionCall",
                          "src": "4342:42:124"
                        },
                        "nativeSrc": "4342:42:124",
                        "nodeType": "YulExpressionStatement",
                        "src": "4342:42:124"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "4466:3:124",
                                  "nodeType": "YulIdentifier",
                                  "src": "4466:3:124"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "4471:4:124",
                                  "nodeType": "YulLiteral",
                                  "src": "4471:4:124",
                                  "type": "",
                                  "value": "0x28"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "4462:3:124",
                                "nodeType": "YulIdentifier",
                                "src": "4462:3:124"
                              },
                              "nativeSrc": "4462:14:124",
                              "nodeType": "YulFunctionCall",
                              "src": "4462:14:124"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "4478:66:124",
                              "nodeType": "YulLiteral",
                              "src": "4478:66:124",
                              "type": "",
                              "value": "0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "4455:6:124",
                            "nodeType": "YulIdentifier",
                            "src": "4455:6:124"
                          },
                          "nativeSrc": "4455:90:124",
                          "nodeType": "YulFunctionCall",
                          "src": "4455:90:124"
                        },
                        "nativeSrc": "4455:90:124",
                        "nodeType": "YulExpressionStatement",
                        "src": "4455:90:124"
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45399,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4375:7:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45396,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4089:3:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45396,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4187:3:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45396,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4353:3:124",
                      "valueSize": 1
                    },
                    {
                      "declaration": 45396,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4466:3:124",
                      "valueSize": 1
                    }
                  ],
                  "id": 45403,
                  "nodeType": "InlineAssembly",
                  "src": "4032:524:124"
                }
              ]
            },
            "documentation": {
              "id": 45393,
              "nodeType": "StructuredDocumentation",
              "src": "3819:67:124",
              "text": "@notice Returns mem pointer to minimal proxy's deploy bytecode."
            },
            "id": 45405,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_cloneBytecodePtr",
            "nameLocation": "3901:17:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45394,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3918:2:124"
            },
            "returnParameters": {
              "id": 45397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45396,
                  "mutability": "mutable",
                  "name": "ptr",
                  "nameLocation": "3974:3:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45405,
                  "src": "3961:16:124",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 45395,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3961:5:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3960:18:124"
            },
            "scope": 45417,
            "src": "3892:671:124",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "private"
          },
          {
            "canonicalName": "Clonable2.Storage",
            "id": 45408,
            "members": [
              {
                "constant": false,
                "id": 45407,
                "mutability": "mutable",
                "name": "master",
                "nameLocation": "4605:6:124",
                "nodeType": "VariableDeclaration",
                "scope": 45408,
                "src": "4597:14:124",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 45406,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "4597:7:124",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Storage",
            "nameLocation": "4578:7:124",
            "nodeType": "StructDefinition",
            "scope": 45417,
            "src": "4571:48:124",
            "visibility": "public"
          },
          {
            "body": {
              "id": 45415,
              "nodeType": "Block",
              "src": "4699:231:124",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "4719:204:124",
                    "nodeType": "YulBlock",
                    "src": "4719:204:124",
                    "statements": [
                      {
                        "nativeSrc": "4829:83:124",
                        "nodeType": "YulAssignment",
                        "src": "4829:83:124",
                        "value": {
                          "kind": "number",
                          "nativeSrc": "4846:66:124",
                          "nodeType": "YulLiteral",
                          "src": "4846:66:124",
                          "type": "",
                          "value": "0x033dcaf396f361642869bf1bdf9c3454888f3e9bbf7939acdd2e40c3833fef00"
                        },
                        "variableNames": [
                          {
                            "name": "clonable.slot",
                            "nativeSrc": "4829:13:124",
                            "nodeType": "YulIdentifier",
                            "src": "4829:13:124"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "prague",
                  "externalReferences": [
                    {
                      "declaration": 45412,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "4829:13:124",
                      "suffix": "slot",
                      "valueSize": 1
                    }
                  ],
                  "id": 45414,
                  "nodeType": "InlineAssembly",
                  "src": "4710:213:124"
                }
              ]
            },
            "id": 45416,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "__clonable2",
            "nameLocation": "4636:11:124",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 45409,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4647:2:124"
            },
            "returnParameters": {
              "id": 45413,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 45412,
                  "mutability": "mutable",
                  "name": "clonable",
                  "nameLocation": "4689:8:124",
                  "nodeType": "VariableDeclaration",
                  "scope": 45416,
                  "src": "4673:24:124",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Storage_$45408_storage_ptr",
                    "typeString": "struct Clonable2.Storage"
                  },
                  "typeName": {
                    "id": 45411,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 45410,
                      "name": "Storage",
                      "nameLocations": [
                        "4673:7:124"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 45408,
                      "src": "4673:7:124"
                    },
                    "referencedDeclaration": 45408,
                    "src": "4673:7:124",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Storage_$45408_storage_ptr",
                      "typeString": "struct Clonable2.Storage"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4672:26:124"
            },
            "scope": 45417,
            "src": "4627:303:124",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 45418,
        "src": "104:4829:124",
        "usedErrors": [
          16,
          19
        ],
        "usedEvents": [
          24,
          45209
        ]
      }
    ],
    "src": "35:4898:124"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.30+commit.73712a01.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-10-14T12:38:50.389Z",
  "devdoc": {
    "errors": {
      "InvalidInitialization()": [
        {
          "details": "The contract is already initialized."
        }
      ],
      "NotInitializing()": [
        {
          "details": "The contract is not initializing."
        }
      ]
    },
    "events": {
      "Initialized(uint64)": {
        "details": "Triggered when the contract has been initialized or reinitialized."
      }
    },
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "cloned()": {
        "notice": "Tells whether this contract is a clone of `self()`"
      },
      "initialized()": {
        "notice": "Tells whether this instance has been initialized."
      },
      "master()": {
        "notice": "Master address from which this contract was cloned."
      },
      "target()": {
        "notice": "Contract address to which clones will be re-directed."
      }
    },
    "version": 1
  }
}