{
  "fileName": "WithInitialize.sol",
  "contractName": "WithSimpleBaseUninitialized",
  "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": "875:144:24:-:0;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "875:144:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;963:54;;;:::i;:::-;;380:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;937:21;;;;;;:::o;963:54::-;1010:2;998:9;;:14;;;;;;;963:54;:::o;380:88::-;416:13;437:26;;;;;;;;;;;;;;;;;;;;;;;380:88;;:::o",
  "abi": [
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "say",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "someValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "0x60806040523480156100115760006000fd5b50610017565b61018c806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c80634a627e611461004c5780638129fc1c1461006a578063954ab4b21461007457610046565b60006000fd5b6100546100f8565b6040518082815260200191505060405180910390f35b610072610101565b005b61007c610111565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100bd5780820151818401525b6020810190506100a1565b50505050905090810190601f1680156100ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60006000505481565b602a60006000508190909055505b565b60606040518060400160405280601181526020017f576974686f7574496e697469616c697a650000000000000000000000000000008152602001509050610153565b9056fea26469706673582212209be5cbc78bd28850c0fa29fbd56508277bdf78558717b52545f3fd73c9a82b4964736f6c634300060a0033",
  "deployedBytecode": "0x60806040523480156100115760006000fd5b50600436106100465760003560e01c80634a627e611461004c5780638129fc1c1461006a578063954ab4b21461007457610046565b60006000fd5b6100546100f8565b6040518082815260200191505060405180910390f35b610072610101565b005b61007c610111565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100bd5780820151818401525b6020810190506100a1565b50505050905090810190601f1680156100ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60006000505481565b602a60006000508190909055505b565b60606040518060400160405280601181526020017f576974686f7574496e697469616c697a650000000000000000000000000000008152602001509050610153565b9056fea26469706673582212209be5cbc78bd28850c0fa29fbd56508277bdf78558717b52545f3fd73c9a82b4964736f6c634300060a0033",
  "compiler": {
    "name": "solc",
    "version": "0.6.10+commit.00c0fcaf.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
