PragmaDirective
   Source: "pragma solidity ^0.4.24;"
ContractDefinition "Owned"
   Source: "contract Owned {\n    address owner;\n    \n    modifier onlyOwner { require(msg.sender == owner); _; }\n\n    constructor() public {\n        owner = msg.sender;\n    }\n}"
  VariableDeclaration "owner"
     Type: address
     Source: "address owner"
    ElementaryTypeName address
       Source: "address"
  ModifierDefinition "onlyOwner"
     Source: "modifier onlyOwner { require(msg.sender == owner); _; }"
    ParameterList
       Source: ""
    Block
       Source: "{ require(msg.sender == owner); _; }"
      ExpressionStatement
         Source: "require(msg.sender == owner)"
        FunctionCall
           Type: tuple()
           Source: "require(msg.sender == owner)"
          Identifier require
             Type: function (bool) pure
             Source: "require"
          BinaryOperation using operator ==
             Type: bool
             Source: "msg.sender == owner"
            MemberAccess to member sender
               Type: address
               Source: "msg.sender"
              Identifier msg
                 Type: msg
                 Source: "msg"
            Identifier owner
               Type: address
               Source: "owner"
      PlaceholderStatement
         Source: "_"
  FunctionDefinition "" - public
     Source: "constructor() public {\n        owner = msg.sender;\n    }"
    ParameterList
       Source: "()"
    ParameterList
       Source: ""
    Block
       Source: "{\n        owner = msg.sender;\n    }"
      ExpressionStatement
         Source: "owner = msg.sender"
        Assignment using operator =
           Type: address
           Source: "owner = msg.sender"
          Identifier owner
             Type: address
             Source: "owner"
          MemberAccess to member sender
             Type: address
             Source: "msg.sender"
            Identifier msg
               Type: msg
               Source: "msg"
