{
  "fileName": "WithInitialize.sol",
  "contractName": "AnotherWithInitialize",
  "source": "pragma solidity ^0.6.0;\n// SPDX-License-Identifier: MIT\n\nimport \"../Initializable.sol\";\n\ncontract WithInitialize {\n  uint public value;\n\n  function initialize() public virtual {\n    value = 42;\n  }\n}\n\ncontract AnotherWithInitialize is Initializable {\n  uint public anotherValue;\n\n  function init() initializer public {\n    anotherValue = 42;\n  }\n}\n\ncontract WithoutInitialize {\n  function say() public pure returns (string memory) {\n    return \"WithoutInitialize\";\n  }\n}\n\ncontract WithBaseUninitialized is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n\n  function initialize() public override {\n    someValue = 42;\n  }\n}\n\ncontract WithBaseInitialized is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n\n  function initialize() public override {\n    WithInitialize.initialize();\n    AnotherWithInitialize.init();\n    someValue = 42;\n  }\n}\n\ncontract WithSimpleBaseUninitialized is WithoutInitialize {\n  uint public someValue;\n\n  function initialize() public {\n    someValue = 42;\n  }\n}\n\ncontract ShouldHaveInitialize is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n}\n\ncontract DoesNotNeedAnInitialize is WithInitialize, WithoutInitialize {\n  uint public someValue;\n}\n\ncontract ExtendsFromShouldHaveInitialize is ShouldHaveInitialize {\n  uint public someOtherValue;\n}\n",
  "sourcePath": "contracts/mocks/WithInitialize.sol",
  "sourceMap": "201:146:24:-:0;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "201:146:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;253:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;282:63;;;:::i;:::-;;253:24;;;;;;:::o;282:63::-;1056:12:0;;;;;;;;;;;:31;;;;1072:15;:13;:15;;:::i;:::-;1056:31;:47;;;;1092:11;;;;;;;;;;;1091:12;1056:47;1048:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1161:19;1184:12;;;;;;;;;;;1183:13;1161:35;;1206:14;1202:80;;;1245:4;1230:12;;:19;;;;;;;;;;;;;;;;;;1271:4;1257:11;;:18;;;;;;;;;;;;;;;;;;1202:80;338:2:24::1;323:12;;:17;;;;;;;1288:1:0;1300:14:::0;1296:55;;;1339:5;1324:12;;:20;;;;;;;;;;;;;;;;;;1296:55;282:63:24;;:::o;1441:498:0:-;1488:4;1829:12;1852:4;1829:28;;1863:10;1908:4;1896:17;1890:23;;1933:1;1927:2;:7;1920:14;;;;;;1441:498;;;;:::o",
  "abi": [
    {
      "inputs": [],
      "name": "anotherValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/mocks/WithInitialize.sol",
    "exportedSymbols": {
      "AnotherWithInitialize": [
        5042
      ],
      "DoesNotNeedAnInitialize": [
        5120
      ],
      "ExtendsFromShouldHaveInitialize": [
        5125
      ],
      "ShouldHaveInitialize": [
        5113
      ],
      "WithBaseInitialized": [
        5093
      ],
      "WithBaseUninitialized": [
        5067
      ],
      "WithInitialize": [
        5027
      ],
      "WithSimpleBaseUninitialized": [
        5106
      ],
      "WithoutInitialize": [
        5051
      ]
    },
    "id": 5126,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5015,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../Initializable.sol",
        "id": 5016,
        "nodeType": "ImportDirective",
        "scope": 5126,
        "sourceUnit": 75,
        "src": "57:30:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5027,
        "linearizedBaseContracts": [
          5027
        ],
        "name": "WithInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "3fa4f245",
            "id": 5018,
            "mutability": "mutable",
            "name": "value",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5027,
            "src": "117:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5017,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "117:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5025,
              "nodeType": "Block",
              "src": "176:21:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5021,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5018,
                      "src": "182:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 5022,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "190:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "182:10:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5024,
                  "nodeType": "ExpressionStatement",
                  "src": "182:10:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 5026,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5019,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "158:2:24"
            },
            "returnParameters": {
              "id": 5020,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "176:0:24"
            },
            "scope": 5027,
            "src": "139:58:24",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "89:110:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5028,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 74,
              "src": "235:13:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$74",
                "typeString": "contract Initializable"
              }
            },
            "id": 5029,
            "nodeType": "InheritanceSpecifier",
            "src": "235:13:24"
          }
        ],
        "contractDependencies": [
          74
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5042,
        "linearizedBaseContracts": [
          5042,
          74
        ],
        "name": "AnotherWithInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "68620bd0",
            "id": 5031,
            "mutability": "mutable",
            "name": "anotherValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5042,
            "src": "253:24:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5030,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "253:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5040,
              "nodeType": "Block",
              "src": "317:28:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5036,
                      "name": "anotherValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5031,
                      "src": "323:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 5037,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "338:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "323:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5039,
                  "nodeType": "ExpressionStatement",
                  "src": "323:17:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e1c7392a",
            "id": 5041,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 5034,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 5033,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 47,
                  "src": "298:11:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "298:11:24"
              }
            ],
            "name": "init",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5032,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "295:2:24"
            },
            "returnParameters": {
              "id": 5035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "317:0:24"
            },
            "scope": 5042,
            "src": "282:63:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "201:146:24"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5051,
        "linearizedBaseContracts": [
          5051
        ],
        "name": "WithoutInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 5049,
              "nodeType": "Block",
              "src": "431:37:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "576974686f7574496e697469616c697a65",
                    "id": 5047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "444:19:24",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_29904a0199e04a428d841982e15369f76a041f59a9487735d519e6dd6ca6c78c",
                      "typeString": "literal_string \"WithoutInitialize\""
                    },
                    "value": "WithoutInitialize"
                  },
                  "functionReturnParameters": 5046,
                  "id": 5048,
                  "nodeType": "Return",
                  "src": "437:26:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "954ab4b2",
            "id": 5050,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5043,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "392:2:24"
            },
            "returnParameters": {
              "id": 5046,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5045,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5050,
                  "src": "416:13:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5044,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "415:15:24"
            },
            "scope": 5051,
            "src": "380:88:24",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "349:121:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5052,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5027,
              "src": "506:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$5027",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 5053,
            "nodeType": "InheritanceSpecifier",
            "src": "506:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5054,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5042,
              "src": "522:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$5042",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 5055,
            "nodeType": "InheritanceSpecifier",
            "src": "522:21:24"
          }
        ],
        "contractDependencies": [
          74,
          5027,
          5042
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5067,
        "linearizedBaseContracts": [
          5067,
          5042,
          74,
          5027
        ],
        "name": "WithBaseUninitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "4a627e61",
            "id": 5057,
            "mutability": "mutable",
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5067,
            "src": "548:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5056,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "548:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              5026
            ],
            "body": {
              "id": 5065,
              "nodeType": "Block",
              "src": "612:25:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5063,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5061,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5057,
                      "src": "618:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 5062,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "630:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "618:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5064,
                  "nodeType": "ExpressionStatement",
                  "src": "618:14:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 5066,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5059,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "603:8:24"
            },
            "parameters": {
              "id": 5058,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "593:2:24"
            },
            "returnParameters": {
              "id": 5060,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "612:0:24"
            },
            "scope": 5067,
            "src": "574:63:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "472:167:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5068,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5027,
              "src": "673:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$5027",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 5069,
            "nodeType": "InheritanceSpecifier",
            "src": "673:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5070,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5042,
              "src": "689:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$5042",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 5071,
            "nodeType": "InheritanceSpecifier",
            "src": "689:21:24"
          }
        ],
        "contractDependencies": [
          74,
          5027,
          5042
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5093,
        "linearizedBaseContracts": [
          5093,
          5042,
          74,
          5027
        ],
        "name": "WithBaseInitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "4a627e61",
            "id": 5073,
            "mutability": "mutable",
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5093,
            "src": "715:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5072,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "715:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              5026
            ],
            "body": {
              "id": 5091,
              "nodeType": "Block",
              "src": "779:92:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5077,
                        "name": "WithInitialize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5027,
                        "src": "785:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_WithInitialize_$5027_$",
                          "typeString": "type(contract WithInitialize)"
                        }
                      },
                      "id": 5079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5026,
                      "src": "785:25:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 5080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "785:27:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5081,
                  "nodeType": "ExpressionStatement",
                  "src": "785:27:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5082,
                        "name": "AnotherWithInitialize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5042,
                        "src": "818:21:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_AnotherWithInitialize_$5042_$",
                          "typeString": "type(contract AnotherWithInitialize)"
                        }
                      },
                      "id": 5084,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5041,
                      "src": "818:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 5085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "818:28:24",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5086,
                  "nodeType": "ExpressionStatement",
                  "src": "818:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5089,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5087,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5073,
                      "src": "852:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 5088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "864:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "852:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5090,
                  "nodeType": "ExpressionStatement",
                  "src": "852:14:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 5092,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5075,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "770:8:24"
            },
            "parameters": {
              "id": 5074,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "760:2:24"
            },
            "returnParameters": {
              "id": 5076,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "779:0:24"
            },
            "scope": 5093,
            "src": "741:130:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "641:232:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5094,
              "name": "WithoutInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5051,
              "src": "915:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithoutInitialize_$5051",
                "typeString": "contract WithoutInitialize"
              }
            },
            "id": 5095,
            "nodeType": "InheritanceSpecifier",
            "src": "915:17:24"
          }
        ],
        "contractDependencies": [
          5051
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5106,
        "linearizedBaseContracts": [
          5106,
          5051
        ],
        "name": "WithSimpleBaseUninitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "4a627e61",
            "id": 5097,
            "mutability": "mutable",
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5106,
            "src": "937:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5096,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "937:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5104,
              "nodeType": "Block",
              "src": "992:25:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 5102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 5100,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5097,
                      "src": "998:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 5101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1010:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "998:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 5103,
                  "nodeType": "ExpressionStatement",
                  "src": "998:14:24"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 5105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5098,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "982:2:24"
            },
            "returnParameters": {
              "id": 5099,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "992:0:24"
            },
            "scope": 5106,
            "src": "963:54:24",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "875:144:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5107,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5027,
              "src": "1054:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$5027",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 5108,
            "nodeType": "InheritanceSpecifier",
            "src": "1054:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5109,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5042,
              "src": "1070:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$5042",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 5110,
            "nodeType": "InheritanceSpecifier",
            "src": "1070:21:24"
          }
        ],
        "contractDependencies": [
          74,
          5027,
          5042
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5113,
        "linearizedBaseContracts": [
          5113,
          5042,
          74,
          5027
        ],
        "name": "ShouldHaveInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "4a627e61",
            "id": 5112,
            "mutability": "mutable",
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5113,
            "src": "1096:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5111,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1096:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "1021:99:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5114,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5027,
              "src": "1158:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$5027",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 5115,
            "nodeType": "InheritanceSpecifier",
            "src": "1158:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5116,
              "name": "WithoutInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5051,
              "src": "1174:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithoutInitialize_$5051",
                "typeString": "contract WithoutInitialize"
              }
            },
            "id": 5117,
            "nodeType": "InheritanceSpecifier",
            "src": "1174:17:24"
          }
        ],
        "contractDependencies": [
          5027,
          5051
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5120,
        "linearizedBaseContracts": [
          5120,
          5051,
          5027
        ],
        "name": "DoesNotNeedAnInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "4a627e61",
            "id": 5119,
            "mutability": "mutable",
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5120,
            "src": "1196:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5118,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1196:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "1122:98:24"
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 5121,
              "name": "ShouldHaveInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5113,
              "src": "1266:20:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ShouldHaveInitialize_$5113",
                "typeString": "contract ShouldHaveInitialize"
              }
            },
            "id": 5122,
            "nodeType": "InheritanceSpecifier",
            "src": "1266:20:24"
          }
        ],
        "contractDependencies": [
          74,
          5027,
          5042,
          5113
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5125,
        "linearizedBaseContracts": [
          5125,
          5113,
          5042,
          74,
          5027
        ],
        "name": "ExtendsFromShouldHaveInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "functionSelector": "df04ef0a",
            "id": 5124,
            "mutability": "mutable",
            "name": "someOtherValue",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 5125,
            "src": "1291:26:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 5123,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1291:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 5126,
        "src": "1222:98:24"
      }
    ],
    "src": "0:1321:24"
  },
  "bytecode": "0x60806040523480156100115760006000fd5b50610017565b61020f806100266000396000f3fe60806040523480156100115760006000fd5b506004361061003b5760003560e01c806368620bd014610041578063e1c7392a1461005f5761003b565b60006000fd5b610049610069565b6040518082815260200191505060405180910390f35b610067610072565b005b60336000505481565b600060019054906101000a900460ff1680610097575061009661018c63ffffffff16565b5b806100af5750600060009054906101000a900460ff16155b1515610106576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806101ac602e913960400191505060405180910390fd5b6000600060019054906101000a900460ff161590508015610158576001600060016101000a81548160ff0219169083151502179055506001600060006101000a81548160ff0219169083151502179055505b602a60336000508190909055505b8015610188576000600060016101000a81548160ff0219169083151502179055505b505b565b600060003090506000813b905060008114925050506101a85650505b9056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212209c45d8c0000943326fabe459c544df2a3e0e02862e7fa8fe8c5bf86f7ee9fed964736f6c634300060a0033",
  "deployedBytecode": "0x60806040523480156100115760006000fd5b506004361061003b5760003560e01c806368620bd014610041578063e1c7392a1461005f5761003b565b60006000fd5b610049610069565b6040518082815260200191505060405180910390f35b610067610072565b005b60336000505481565b600060019054906101000a900460ff1680610097575061009661018c63ffffffff16565b5b806100af5750600060009054906101000a900460ff16155b1515610106576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806101ac602e913960400191505060405180910390fd5b6000600060019054906101000a900460ff161590508015610158576001600060016101000a81548160ff0219169083151502179055506001600060006101000a81548160ff0219169083151502179055505b602a60336000508190909055505b8015610188576000600060016101000a81548160ff0219169083151502179055505b505b565b600060003090506000813b905060008114925050506101a85650505b9056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a26469706673582212209c45d8c0000943326fabe459c544df2a3e0e02862e7fa8fe8c5bf86f7ee9fed964736f6c634300060a0033",
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
