(command.CommandList
  children: [
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} 
          {
            (braced_var_sub
              token: <Id.VSub_Name ENVIRONMENT_SH>
              suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<isset>})
            )
          } {<Id.Lit_RBracket ']'>}
        )
        (command.ControlFlow token:<Id.ControlFlow_Return return>)
      ]
    )
    (C {<declare>} {<-g>} {<Id.Lit_VarLike 'ENVIRONMENT_SH='> <true>})
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/common.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.arraylist.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.linkedlist.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.stack.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.queue.sh'>
      }
    )
    (C {<.>} 
      {
        (braced_var_sub
          token: <Id.VSub_Name BASH_SOURCE>
          suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash '/'> <'*'>})
        ) <'/variables.map.sh'>
      }
    )
    (C {<declare>} {<-g>} {<Id.Lit_VarLike 'ENVIRONMENT_DEBUG='> <0>})
    (command.ShFunction
      name: 'environment::new'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::new '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [180 195]
                )
              ]
            )
            (command.Sentence
              child: 
                (C 
                  {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                    <Id.Lit_Colon ':'> <new>
                  }
                )
              terminator: <Id.Op_Semi _>
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:env)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name RESULT))}
                  spids: [222]
                )
              ]
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <new>
              }
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <prepend>
              } {(DQ (${ Id.VSub_Name env))} {(DQ (${ Id.VSub_Name RESULT))}
            )
          ]
        )
    )
    (command.ShFunction
      name: 'environment::pushScope'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::pushScope '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [296 311]
                )
              ]
            )
            (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))})
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <new>
              }
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <prepend>
              } {(DQ (${ Id.VSub_Name env))} {(DQ (${ Id.VSub_Name RESULT))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name RESULT))}
                  spids: [370]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: 'environment::popScope'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::popScope '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [419 434]
                )
              ]
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <rest>
              } {(DQ ($ Id.VSub_Number '$1'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name RESULT))}
                  spids: [464]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: 'environment::hasValue'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::getValue '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [501 516]
                )
              ]
            )
            (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))})
            (C {<declare>} {<Id.Lit_VarLike 'name='> (DQ (${ Id.VSub_Number 2))})
            (C {<declare>} {<scope>})
            (command.Sentence
              child: 
                (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} 
                  {(DQ (${ Id.VSub_Name name))}
                )
              terminator: <Id.Op_Semi _>
            )
            (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Name RESULT))})
            (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> 
                                <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c>
                              } {(DQ (${ Id.VSub_Name currentEnv))}
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <first>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:scope)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name RESULT))}
                          spids: [633]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C 
                                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> 
                                        <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c>
                                      } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ControlFlow
                              token: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [641 665]
                        )
                      ]
                    )
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <rest>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:currentEnv)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
                          spids: [692]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
        )
    )
    (command.ShFunction
      name: 'environment::getValue'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::getValue '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [739 754]
                )
              ]
            )
            (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))})
            (C {<declare>} {<Id.Lit_VarLike 'name='> (DQ (${ Id.VSub_Number 2))})
            (C {<declare>} {<scope>})
            (command.Sentence
              child: 
                (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} 
                  {(DQ (${ Id.VSub_Name name))}
                )
              terminator: <Id.Op_Semi _>
            )
            (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Name RESULT))})
            (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> 
                                <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c>
                              } {(DQ (${ Id.VSub_Name currentEnv))}
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <first>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:scope)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name RESULT))}
                          spids: [871]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C 
                                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> 
                                        <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c>
                                      } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                                <Id.Lit_Colon ':'> <get>
                              } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name name))}
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Return return>
                            )
                          ]
                          spids: [879 903]
                        )
                      ]
                    )
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <rest>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:currentEnv)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
                          spids: [949]
                        )
                      ]
                    )
                  ]
                )
            )
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {($ Id.VSub_DollarName '$name')}
            )
            (C {<stderr>} 
              {
                (DQ <'Variable ['> (${ Id.VSub_Name name) <'='> (${ Id.VSub_Name RESULT) 
                  <'] not found in current environment'>
                )
              }
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
    )
    (command.ShFunction
      name: 'environment::setVariable'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: (C {<stderr>} {(DQ <'environment::setVariable '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1028 1043]
                )
              ]
            )
            (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))})
            (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Number 2))})
            (C {<declare>} {<Id.Lit_VarLike 'valueToken='> (DQ (${ Id.VSub_Number 3))})
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <first>
              } {(DQ (${ Id.VSub_Name env))}
            )
            (C {<declare>} {<Id.Lit_VarLike 'scope='> (DQ (${ Id.VSub_Name RESULT))})
            (C {<declare>} {<returnValue>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                                <Id.Lit_Colon ':'> <containsKey_c>
                              } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:returnValue)
                          op: assign_op.Equal
                          rhs: {<0>}
                          spids: [1149]
                        )
                      ]
                    )
                  ]
                  spids: [1122 1146]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:returnValue)
                      op: assign_op.Equal
                      rhs: {<1>}
                      spids: [1156]
                    )
                  ]
                )
              ]
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <put>
              } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1191]
                )
              ]
            )
            (command.ControlFlow
              token: <Id.ControlFlow_Return return>
              arg_word: {($ Id.VSub_DollarName '$returnValue')}
            )
          ]
        )
    )
    (command.ShFunction
      name: 'environment::setOrReplaceVariable'
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name ENVIRONMENT_DEBUG)}
                                  right: {<1>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.Sentence
                      child: 
                        (C {<stderr>} {(DQ <'environment::setOrReplaceVariable '> (${ Id.VSub_At '@'))})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1234 1249]
                )
              ]
            )
            (C {<declare>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 1))})
            (C {<declare>} {<Id.Lit_VarLike 'keyToken='> (DQ (${ Id.VSub_Number 2))})
            (C {<declare>} {<Id.Lit_VarLike 'valueToken='> (DQ (${ Id.VSub_Number 3))})
            (C {<declare>} {<scope>})
            (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Name env))})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> 
                                <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c>
                              } {(DQ (${ Id.VSub_Name currentEnv))}
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <first>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:scope)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name RESULT))}
                          spids: [1350]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C 
                                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> 
                                        <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <containsKey_c>
                                      } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                                <Id.Lit_Colon ':'> <put>
                              } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))}
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:RESULT)
                                  op: assign_op.Equal
                                  rhs: {(DQ )}
                                  spids: [1412]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [1358 1382]
                        )
                      ]
                    )
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <rest>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:currentEnv)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
                          spids: [1441]
                        )
                      ]
                    )
                  ]
                )
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <first>
              } {(DQ (${ Id.VSub_Name env))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:scope)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name RESULT))}
                  spids: [1470]
                )
              ]
            )
            (C 
              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                <Id.Lit_Colon ':'> <put>
              } {(DQ (${ Id.VSub_Name scope))} {(DQ (${ Id.VSub_Name keyToken))} {(DQ (${ Id.VSub_Name valueToken))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [1505]
                )
              ]
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
        )
    )
    (command.ShFunction
      name: 'environment::print'
      body: 
        (BraceGroup
          children: [
            (C {<declare>} {<Id.Lit_VarLike 'currentEnv='> (DQ (${ Id.VSub_Number 1))})
            (C {<echo>} {(DQ <'Environment ['> (${ Id.VSub_Name currentEnv) <']'>)})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (C 
                              {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> 
                                <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <isEmpty_c>
                              } {(DQ (${ Id.VSub_Name currentEnv))}
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <first>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <Map> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <print>
                      } {(DQ (${ Id.VSub_Name RESULT))}
                    )
                    (C 
                      {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <LinkedList> <Id.Lit_Colon ':'> 
                        <Id.Lit_Colon ':'> <rest>
                      } {(DQ (${ Id.VSub_Name currentEnv))}
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:currentEnv)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
                          spids: [1621]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Number '$0')} 
                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {($ Id.VSub_DollarName '$BASH_SOURCE')} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(command.ControlFlow token:<Id.ControlFlow_Return return>)]
          spids: [1635 1649]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key one'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:key1)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1670]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value one'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:value1)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1688]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key two'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:key2)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1706]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value two'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:value2)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1724]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'key three'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:key3)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1742]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'value three'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:value3)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1760]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<String>} {(DQ <'no such key'>)})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:keyUnknown)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name RESULT)}
              spids: [1778]
            )
          ]
        )
      ]
    )
    (C {<declare>} {<env1>})
    (C {<declare>} {<env2>})
    (C {<declare>} {<env3>})
    (command.CommandList
      children: [
        (command.Sentence
          child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env1)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [1803]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} 
      {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Single variable'>)}
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} 
      {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Multiple variables, first'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key2')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Multiple variables, second'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env1)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2023]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env1))} 
      {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} 
              {(DQ (${ Id.VSub_Name env1))}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env2)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2058]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env2))} 
      {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Second scope'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <popScope>} 
              {(DQ (${ Id.VSub_Name env2))}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env3)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2205]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope post pop'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <hasValue>} 
              {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key2')}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} 
          {(DQ <'Variable from second scope after we popped it'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env1)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2316]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} 
      {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} 
              {(DQ (${ Id.VSub_Name env1))}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env2)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2351]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} 
      {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')} {($ Id.VSub_DollarName '$value2')}
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setOrReplaceVariable>} 
      {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value3')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key2')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Second scope'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value three'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <popScope>} 
              {(DQ (${ Id.VSub_Name env2))}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env3)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
              spids: [2513]
            )
          ]
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value three'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'Variable from first scope post pop'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <hasValue>} 
              {(DQ (${ Id.VSub_Name env3))} {($ Id.VSub_DollarName '$key2')}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {<1>} {($ Id.VSub_QMark '$?')} 
          {(DQ <'Variable from second scope after we popped it'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>})
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env1)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
              spids: [2626]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} 
      {($ Id.VSub_DollarName '$env1')} {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value1')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <pushScope>} 
              {(DQ (${ Id.VSub_Name env1))}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:env2)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_DollarName '$RESULT'))}
              spids: [2655]
            )
          ]
        )
      ]
    )
    (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <setVariable>} {(DQ (${ Id.VSub_Name env2))} 
      {($ Id.VSub_DollarName '$key1')} {($ Id.VSub_DollarName '$value2')}
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env1))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value one'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'setVariable, original env'>)}
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (C {<environment> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <getValue>} 
              {(DQ (${ Id.VSub_Name env2))} {($ Id.VSub_DollarName '$key1')}
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Sentence
          child: 
            (C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>} 
              {(DQ (${ Id.VSub_Name RESULT))}
            )
          terminator: <Id.Op_Semi _>
        )
        (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>} {(DQ <'value two'>)} 
          {(DQ (${ Id.VSub_Name RESULT))} {(DQ <'setVariable, new env'>)}
        )
      ]
    )
    (C {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <report>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} 
                          {
                            (braced_var_sub
                              token: <Id.VSub_Number 1>
                              suffix_op: (suffix_op.Unary op_id:Id.VTest_Plus arg_word:{<isset>})
                            )
                          } {<Id.Lit_RBracket ']'>}
                        )
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} 
                          {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <debug>)} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <printMetadata>})]
          spids: [2795 2825]
        )
      ]
    )
  ]
)