@ ProgramNode (location: (1,0)-(41,7))
├── locals: []
└── statements:
    @ StatementsNode (location: (1,0)-(41,7))
    └── body: (length: 21)
        ├── @ CallNode (location: (1,0)-(1,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (1,0)-(1,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (1,0)-(1,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :!=
        │   ├── message_loc: (1,4)-(1,6) = "!="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (1,7)-(1,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (1,7)-(1,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (3,0)-(3,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (3,0)-(3,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (3,0)-(3,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :!~
        │   ├── message_loc: (3,4)-(3,6) = "!~"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (3,7)-(3,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (3,7)-(3,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (5,0)-(5,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (5,0)-(5,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (5,0)-(5,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :%
        │   ├── message_loc: (5,4)-(5,5) = "%"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (5,6)-(5,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (5,6)-(5,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (7,0)-(7,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (7,0)-(7,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (7,0)-(7,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :&
        │   ├── message_loc: (7,4)-(7,5) = "&"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (7,6)-(7,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (7,6)-(7,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (9,0)-(9,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (9,0)-(9,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (9,0)-(9,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :*
        │   ├── message_loc: (9,4)-(9,5) = "*"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (9,6)-(9,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (9,6)-(9,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (11,0)-(11,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (11,0)-(11,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (11,0)-(11,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :**
        │   ├── message_loc: (11,4)-(11,6) = "**"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (11,7)-(11,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (11,7)-(11,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (13,0)-(13,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (13,0)-(13,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (13,0)-(13,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :+
        │   ├── message_loc: (13,4)-(13,5) = "+"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (13,6)-(13,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (13,6)-(13,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (15,0)-(15,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (15,0)-(15,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (15,0)-(15,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :-
        │   ├── message_loc: (15,4)-(15,5) = "-"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (15,6)-(15,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (15,6)-(15,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (17,0)-(17,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (17,0)-(17,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (17,0)-(17,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :/
        │   ├── message_loc: (17,4)-(17,5) = "/"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (17,6)-(17,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (17,6)-(17,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (19,0)-(19,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (19,0)-(19,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (19,0)-(19,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :<
        │   ├── message_loc: (19,4)-(19,5) = "<"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (19,6)-(19,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (19,6)-(19,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (21,0)-(21,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (21,0)-(21,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (21,0)-(21,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :<<
        │   ├── message_loc: (21,4)-(21,6) = "<<"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (21,7)-(21,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (21,7)-(21,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (23,0)-(23,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (23,0)-(23,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (23,0)-(23,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :<=
        │   ├── message_loc: (23,4)-(23,6) = "<="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (23,7)-(23,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (23,7)-(23,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (25,0)-(25,9))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (25,0)-(25,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (25,0)-(25,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :<=>
        │   ├── message_loc: (25,4)-(25,7) = "<=>"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (25,8)-(25,9))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (25,8)-(25,9))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (27,0)-(27,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (27,0)-(27,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (27,0)-(27,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :==
        │   ├── message_loc: (27,4)-(27,6) = "=="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (27,7)-(27,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (27,7)-(27,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (29,0)-(29,9))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (29,0)-(29,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (29,0)-(29,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :===
        │   ├── message_loc: (29,4)-(29,7) = "==="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (29,8)-(29,9))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (29,8)-(29,9))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (31,0)-(31,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (31,0)-(31,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (31,0)-(31,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :=~
        │   ├── message_loc: (31,4)-(31,6) = "=~"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (31,7)-(31,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (31,7)-(31,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (33,0)-(33,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (33,0)-(33,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (33,0)-(33,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :>
        │   ├── message_loc: (33,4)-(33,5) = ">"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (33,6)-(33,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (33,6)-(33,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (35,0)-(35,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (35,0)-(35,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (35,0)-(35,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :>=
        │   ├── message_loc: (35,4)-(35,6) = ">="
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (35,7)-(35,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (35,7)-(35,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (37,0)-(37,8))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (37,0)-(37,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (37,0)-(37,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :>>
        │   ├── message_loc: (37,4)-(37,6) = ">>"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (37,7)-(37,8))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (37,7)-(37,8))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        ├── @ CallNode (location: (39,0)-(39,7))
        │   ├── flags: ∅
        │   ├── receiver:
        │   │   @ CallNode (location: (39,0)-(39,3))
        │   │   ├── flags: variable_call, ignore_visibility
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── name: :foo
        │   │   ├── message_loc: (39,0)-(39,3) = "foo"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   └── block: ∅
        │   ├── call_operator_loc: ∅
        │   ├── name: :^
        │   ├── message_loc: (39,4)-(39,5) = "^"
        │   ├── opening_loc: ∅
        │   ├── arguments:
        │   │   @ ArgumentsNode (location: (39,6)-(39,7))
        │   │   ├── flags: ∅
        │   │   └── arguments: (length: 1)
        │   │       └── @ IntegerNode (location: (39,6)-(39,7))
        │   │           └── flags: decimal
        │   ├── closing_loc: ∅
        │   └── block: ∅
        └── @ CallNode (location: (41,0)-(41,7))
            ├── flags: ∅
            ├── receiver:
            │   @ CallNode (location: (41,0)-(41,3))
            │   ├── flags: variable_call, ignore_visibility
            │   ├── receiver: ∅
            │   ├── call_operator_loc: ∅
            │   ├── name: :foo
            │   ├── message_loc: (41,0)-(41,3) = "foo"
            │   ├── opening_loc: ∅
            │   ├── arguments: ∅
            │   ├── closing_loc: ∅
            │   └── block: ∅
            ├── call_operator_loc: ∅
            ├── name: :|
            ├── message_loc: (41,4)-(41,5) = "|"
            ├── opening_loc: ∅
            ├── arguments:
            │   @ ArgumentsNode (location: (41,6)-(41,7))
            │   ├── flags: ∅
            │   └── arguments: (length: 1)
            │       └── @ IntegerNode (location: (41,6)-(41,7))
            │           └── flags: decimal
            ├── closing_loc: ∅
            └── block: ∅
