(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ME_)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(expr)} {(DQ (./) ($ VSub_Number '$0'))} {(Lit_Other ':')} 
                        {(SQ <'.*/\\(.*\\)$'>)}
                      )
                    ]
                  )
                left_token: <Left_Backtick '`'>
                spids: [164 177]
              )
            }
          spids: [163]
        )
      ]
      spids: [163]
    )
    (FuncDef
      name: Exit
      body: 
        (BraceGroup
          children: [
            (Sentence child:(C {(set)} {(Lit_Other '+') (e)}) terminator:<Op_Semi ';'>)
            (Sentence
              child: 
                (Subshell
                  child: (ControlFlow token:<ControlFlow_Exit exit> arg_word:{($ VSub_Number '$1')})
                  spids: [208 212]
                )
              terminator: <Op_Semi ';'>
            )
            (Sentence
              child: (ControlFlow token:<ControlFlow_Exit exit> arg_word:{($ VSub_Number '$1')})
              terminator: <Op_Semi ';'>
            )
          ]
          spids: [200]
        )
      spids: [195 199]
    )
    (C {(Lit_Other ':')} 
      {
        (BracedVarSub
          token: <VSub_Name stderr_fileno_>
          suffix_op: (StringUnary op_id:VTest_Equals arg_word:{(2)})
          spids: [243 247]
        )
      }
    )
    (FuncDef
      name: warn_
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$IFS')}
              arms: [
                (case_arm
                  pat_list: [{(SQ <' '>) (Lit_Other '*')}]
                  action: [
                    (SimpleCommand
                      words: [{(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_Star '$*'))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[297])]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(test)} {($ VSub_Name '$stderr_fileno_')} {(Lit_Other '=')} {(2)})
                        (BraceGroup
                          children: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [
                                    (C {(printf)} {(SQ <'%s\\n'>)} {(DQ ($ VSub_Star '$*'))})
                                    (SimpleCommand
                                      words: [{(sed)} {(1q)}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_GreatAnd
                                          fd: 16777215
                                          arg_word: {($ VSub_Name '$stderr_fileno_')}
                                          spids: [331]
                                        )
                                      ]
                                    )
                                  ]
                                  negated: F
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [313]
                        )
                      ]
                    )
                  ]
                  spids: [282 285 338 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (Subshell
                      child: 
                        (CommandList
                          children: [
                            (Sentence
                              child: 
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:IFS)
                                      op: Equal
                                      rhs: {(SQ <' '>)}
                                      spids: [345]
                                    )
                                  ]
                                  spids: [345]
                                )
                              terminator: <Op_Semi ';'>
                            )
                            (C {(warn_)} {(DQ ($ VSub_At '$@'))})
                          ]
                        )
                      spids: [344 356]
                    )
                  ]
                  spids: [341 342 357 16777215]
                )
              ]
              spids: [274 278 360]
            )
          ]
          spids: [267]
        )
      spids: [262 266]
    )
    (FuncDef
      name: fail_
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: (C {(warn_)} {(DQ ($ VSub_Name '$ME_') (': failed test: ') ($ VSub_At '$@'))})
              terminator: <Op_Semi ';'>
            )
            (Sentence child:(C {(Exit)} {(1)}) terminator:<Op_Semi ';'>)
          ]
          spids: [369]
        )
      spids: [364 368]
    )
    (FuncDef
      name: skip_
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: (C {(warn_)} {(DQ ($ VSub_Name '$ME_') (': skipped test: ') ($ VSub_At '$@'))})
              terminator: <Op_Semi ';'>
            )
            (Sentence child:(C {(Exit)} {(77)}) terminator:<Op_Semi ';'>)
          ]
          spids: [392]
        )
      spids: [387 391]
    )
    (FuncDef
      name: fatal_
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: (C {(warn_)} {(DQ ($ VSub_Name '$ME_') (': hard error: ') ($ VSub_At '$@'))})
              terminator: <Op_Semi ';'>
            )
            (Sentence child:(C {(Exit)} {(99)}) terminator:<Op_Semi ';'>)
          ]
          spids: [415]
        )
      spids: [410 414]
    )
    (FuncDef
      name: framework_failure_
      body: 
        (BraceGroup
          children: [
            (Sentence
              child: (C {(warn_)} {(DQ ($ VSub_Name '$ME_') (': set-up failure: ') ($ VSub_At '$@'))})
              terminator: <Op_Semi ';'>
            )
            (Sentence child:(C {(Exit)} {(99)}) terminator:<Op_Semi ';'>)
          ]
          spids: [438]
        )
      spids: [433 437]
    )
    (Sentence
      child: 
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:DUALCASE) op:Equal rhs:{(1)} spids:[460])]
          spids: [460]
        )
      terminator: <Op_Semi ';'>
    )
    (C {(export)} {(DUALCASE)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(test)} {(-n)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name ZSH_VERSION>
                            suffix_op: (StringUnary op_id:VTest_Plus arg_word:{(set)})
                            spids: [475 479]
                          )
                        )
                      }
                    )
                    (Subshell
                      child: (C {(emulate)} {(sh)})
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [490]
                        )
                        (Redir
                          op_id: Redir_GreatAnd
                          fd: 2
                          arg_word: {(1)}
                          spids: [493]
                        )
                      ]
                      spids: [484 488]
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(emulate)} {(sh)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:NULLCMD)
                  op: Equal
                  rhs: {(Lit_Other ':')}
                  spids: [505]
                )
              ]
              spids: [505]
            )
            (C {(alias)} {(-g)} {(SQ <'${1+"$@"}'>) (Lit_Other '=') (SQ <'"$@"'>)})
            (C {(setopt)} {(NO_GLOB_SUBST)})
          ]
          spids: [16777215 497]
        )
      ]
      else_action: [
        (Case
          to_match: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Subshell
                        child: (C {(set)} {(-o)})
                        redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[538])]
                        spids: [532 536]
                      )
                    ]
                  )
                left_token: <Left_Backtick '`'>
                spids: [531 540]
              )
            }
          arms: [
            (case_arm
              pat_list: [{(Lit_Other '*') (posix) (Lit_Other '*')}]
              action: [(C {(set)} {(-o)} {(posix)})]
              spids: [545 548 556 16777215]
            )
          ]
          spids: [529 542 559]
        )
      ]
      spids: [526 561]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:gl_shell_test_script_)
          op: Equal
          rhs: 
            {
              (SQ <'\n'> <'test $(echo y) = y || exit 1\n'> <'score_=10\n'> 
                <'if test "$VERBOSE" = yes; then\n'> <'  test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9\n'> <'fi\n'> 
                <'test -z "$EXEEXT" && exit $score_\n'> <'shopt -s expand_aliases\n'> <'alias a-b="echo zoo"\n'> <'v=abx\n'> <'     test ${v%x} = ab \\\n'> 
                <'  && test ${v#a} = bx \\\n'> <'  && test $(a-b) = zoo \\\n'> <'  && exit $score_\n'>
              )
            }
          spids: [625]
        )
      ]
      spids: [625]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(test)} {(DQ (x) ($ VSub_Number '$1'))} {(Lit_Other '=')} {(DQ (x--no-reexec))})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(shift)})]
          spids: [16777215 660]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:gl_set_x_corrupts_stderr_)
              op: Equal
              rhs: {(false)}
              spids: [672]
            )
          ]
          spids: [672]
        )
        (C {(export)} {(gl_set_x_corrupts_stderr_)})
        (Assignment
          keyword: Assign_None
          pairs: [(assign_pair lhs:(LhsName name:marginal_) op:Equal rhs:{(EmptyPart)} spids:[686])]
          spids: [686]
        )
        (ForEach
          iter_name: re_shell_
          iter_words: [
            {(__current__)}
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name CONFIG_SHELL>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(no_shell)})
                  spids: [703 707]
                )
              )
            }
            {(/bin/sh)}
            {(bash)}
            {(dash)}
            {(zsh)}
            {(pdksh)}
            {(fail)}
          ]
          do_arg_iter: F
          body: 
            (DoGroup
              children: [
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (C {(test)} {(DQ ($ VSub_Name '$re_shell_'))} {(Lit_Other '=')} {(no_shell)})
                    (ControlFlow token:<ControlFlow_Continue continue>)
                  ]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (C {(test)} {(DQ ($ VSub_Name '$re_shell_'))} {(Lit_Other '=')} {(fail)})
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test)} {(-z)} {(DQ ($ VSub_Name '$marginal_'))})
                            (C {(skip_)} {(failed)} {(to)} {(find)} {(an)} {(adequate)} {(shell)})
                          ]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:re_shell_)
                              op: Equal
                              rhs: {($ VSub_Name '$marginal_')}
                              spids: [793]
                            )
                          ]
                          spids: [793]
                        )
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                      spids: [16777215 765]
                    )
                  ]
                  spids: [16777215 800]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (C {(test)} {(DQ ($ VSub_Name '$re_shell_'))} {(Lit_Other '=')} 
                              {(__current__)}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (Subshell
                          child: (C {(eval)} {(DQ ($ VSub_Name '$gl_shell_test_script_'))})
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [850]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [854]
                            )
                          ]
                          spids: [840 848]
                        )
                      ]
                      spids: [16777215 825]
                    )
                  ]
                  else_action: [
                    (SimpleCommand
                      words: [
                        {(DQ ($ VSub_Name '$re_shell_'))}
                        {(-c)}
                        {(DQ ($ VSub_Name '$gl_shell_test_script_'))}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[871])]
                    )
                  ]
                  spids: [858 875]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:st_)
                      op: Equal
                      rhs: {($ VSub_QMark '$?')}
                      spids: [879]
                    )
                  ]
                  spids: [879]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: (C {(test)} {($ VSub_Name '$st_')} {(Lit_Other '=')} {(10)})
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:gl_set_x_corrupts_stderr_)
                              op: Equal
                              rhs: {(false)}
                              spids: [902]
                            )
                          ]
                          spids: [902]
                        )
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                      spids: [16777215 899]
                    )
                  ]
                  spids: [16777215 909]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (C {(test)} {(DQ ($ VSub_Name '$st_') (':') ($ VSub_Name '$marginal_'))} 
                              {(Lit_Other '=')} {(9) (Lit_Other ':')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:marginal_)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name '$re_shell_'))}
                              spids: [937]
                            )
                          ]
                          spids: [937]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:gl_set_x_corrupts_stderr_)
                              op: Equal
                              rhs: {(true)}
                              spids: [943]
                            )
                          ]
                          spids: [943]
                        )
                      ]
                      spids: [16777215 934]
                    )
                  ]
                  spids: [16777215 947]
                )
              ]
              spids: [725 950]
            )
          spids: [699 16777215]
        )
        (If
          arms: [
            (if_arm
              cond: [
                (Sentence
                  child: 
                    (C {(test)} {(DQ ($ VSub_Name '$re_shell_'))} {(KW_Bang '!') (Lit_Other '=')} 
                      {(__current__)}
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              action: [
                (Case
                  to_match: {($ VSub_Hyphen '$-')}
                  arms: [
                    (case_arm
                      pat_list: [
                        {(Lit_Other '*') (v) (Lit_Other '*') (x) (Lit_Other '*')}
                        {(Lit_Other '*') (x) (Lit_Other '*') (v) (Lit_Other '*')}
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opts_)
                              op: Equal
                              rhs: {(-vx)}
                              spids: [997]
                            )
                          ]
                          spids: [997]
                        )
                      ]
                      spids: [982 995 1000 16777215]
                    )
                    (case_arm
                      pat_list: [{(Lit_Other '*') (v) (Lit_Other '*')}]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opts_)
                              op: Equal
                              rhs: {(-v)}
                              spids: [1008]
                            )
                          ]
                          spids: [1008]
                        )
                      ]
                      spids: [1003 1006 1011 16777215]
                    )
                    (case_arm
                      pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opts_)
                              op: Equal
                              rhs: {(-x)}
                              spids: [1019]
                            )
                          ]
                          spids: [1019]
                        )
                      ]
                      spids: [1014 1017 1022 16777215]
                    )
                    (case_arm
                      pat_list: [{(Lit_Other '*')}]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:opts_)
                              op: Equal
                              rhs: {(EmptyPart)}
                              spids: [1028]
                            )
                          ]
                          spids: [1028]
                        )
                      ]
                      spids: [1025 1026 1030 16777215]
                    )
                  ]
                  spids: [975 979 1033]
                )
                (C {(exec)} {(DQ ($ VSub_Name '$re_shell_'))} {($ VSub_Name '$opts_')} 
                  {(DQ ($ VSub_Number '$0'))} {(--no-reexec)} {(DQ ($ VSub_At '$@'))}
                )
                (SimpleCommand
                  words: [{(echo)} {(DQ ($ VSub_Name '$ME_') (': exec failed'))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1062])]
                )
                (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(127)})
              ]
              spids: [16777215 968]
            )
          ]
          spids: [16777215 1071]
        )
      ]
      spids: [665 1073]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [(C {(test)} {(-n)} {(DQ ($ VSub_Name '$BASH_VERSION'))}) (C {(unalias)} {(-a)})]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (C {(test)} {(-n)} {(DQ ($ VSub_Name '$EXEEXT'))})
        (C {(shopt)} {(-s)} {(expand_aliases)})
      ]
    )
    (C {(Lit_Other ':')} 
      {
        (BracedVarSub
          token: <VSub_Name MALLOC_PERTURB_>
          suffix_op: (StringUnary op_id:VTest_Equals arg_word:{(87)})
          spids: [1140 1144]
        )
      }
    )
    (C {(export)} {(MALLOC_PERTURB_)})
    (FuncDef
      name: cleanup_
      body: 
        (BraceGroup
          children: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
          spids: [1165]
        )
      spids: [1160 1164]
    )
    (FuncDef
      name: emit_diff_u_header_
      body: 
        (BraceGroup
          children: [
            (C {(printf)} {(SQ <'%s\\n'>)} {(DQ ('diff -u ') ($ VSub_Star '$*'))} 
              {(DQ ('--- ') ($ VSub_Number '$1') ('\t1970-01-01'))} {(DQ ('+++ ') ($ VSub_Number '$2') ('\t1970-01-01'))}
            )
          ]
          spids: [1184]
        )
      spids: [1179 1183]
    )
    (FuncDef
      name: compare_dev_null_
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(test)} {($ VSub_Pound '$#')} {(Lit_Other '=')} {(2)})
                (ControlFlow token:<ControlFlow_Return return> arg_word:{(2)})
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ (x) ($ VSub_Number '$1'))} {(Lit_Other '=')} {(x/dev/null)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(test)} {(-s)} {(DQ ($ VSub_Number '$2'))})
                        (ControlFlow
                          token: <ControlFlow_Return return>
                          arg_word: {(0)}
                        )
                      ]
                    )
                    (Sentence
                      child: (C {(emit_diff_u_header_)} {(DQ ($ VSub_At '$@'))})
                      terminator: <Op_Semi ';'>
                    )
                    (C {(sed)} {(SQ <'s/^/+/'>)} {(DQ ($ VSub_Number '$2'))})
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 1273]
                )
              ]
              spids: [16777215 1314]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ (x) ($ VSub_Number '$2'))} {(Lit_Other '=')} {(x/dev/null)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(test)} {(-s)} {(DQ ($ VSub_Number '$1'))})
                        (ControlFlow
                          token: <ControlFlow_Return return>
                          arg_word: {(0)}
                        )
                      ]
                    )
                    (Sentence
                      child: (C {(emit_diff_u_header_)} {(DQ ($ VSub_At '$@'))})
                      terminator: <Op_Semi ';'>
                    )
                    (C {(sed)} {(SQ <'s/^/-/'>)} {(DQ ($ VSub_Number '$1'))})
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [16777215 1332]
                )
              ]
              spids: [16777215 1373]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(2)})
          ]
          spids: [1240]
        )
      spids: [1235 1239]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  ops: [Op_DAmp]
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:diff_out_)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Sentence
                                        child: 
                                          (SimpleCommand
                                            words: [{(exec)}]
                                            redirects: [
                                              (Redir
                                                op_id: Redir_Great
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                                spids: [1390]
                                              )
                                            ]
                                          )
                                        terminator: <Op_Semi ';'>
                                      )
                                      (SimpleCommand
                                        words: [
                                          {(diff)}
                                          {(-u)}
                                          {(DQ ($ VSub_Number '$0'))}
                                          {(DQ ($ VSub_Number '$0'))}
                                        ]
                                        redirects: [
                                          (Redir
                                            op_id: Redir_Less
                                            fd: 16777215
                                            arg_word: {(/dev/null)}
                                            spids: [1406]
                                          )
                                        ]
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [1387 1409]
                              )
                            }
                          spids: [1386]
                        )
                      ]
                      spids: [1386]
                    )
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(diff)} {(-u)} {(Makefile)} {(DQ ($ VSub_Number '$0'))}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [1425]
                            )
                          ]
                        )
                        (SimpleCommand
                          words: [{(grep)} {(SQ <'^[+]#!'>)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [1436]
                            )
                          ]
                        )
                      ]
                      negated: F
                    )
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$diff_out_'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (FuncDef
                      name: compare_
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: (C {(diff)} {(-u)} {(DQ ($ VSub_At '$@'))})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1470]
                        )
                      spids: [1465 1469]
                    )
                  ]
                  spids: [16777215 1462]
                )
              ]
              else_action: [
                (FuncDef
                  name: compare_
                  body: 
                    (BraceGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (SimpleCommand
                                      words: [{(diff)} {(-u)} {(DQ ($ VSub_At '$@'))}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: 16777215
                                          arg_word: {(diff.out)}
                                          spids: [1506]
                                        )
                                      ]
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [(C {(rm)} {(-f)} {(diff.out)}) (C {(true)})]
                              spids: [16777215 1511]
                            )
                          ]
                          else_action: [
                            (C {(cat)} {(diff.out)})
                            (C {(rm)} {(-f)} {(diff.out)})
                            (C {(false)})
                          ]
                          spids: [1532 1550]
                        )
                      ]
                      spids: [1493]
                    )
                  spids: [1487 1491]
                )
              ]
              spids: [1484 1556]
            )
          ]
          spids: [16777215 1440]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:diff_out_)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (Sentence
                                    child: 
                                      (SimpleCommand
                                        words: [{(exec)}]
                                        redirects: [
                                          (Redir
                                            op_id: Redir_Great
                                            fd: 2
                                            arg_word: {(/dev/null)}
                                            spids: [1564]
                                          )
                                        ]
                                      )
                                    terminator: <Op_Semi ';'>
                                  )
                                  (SimpleCommand
                                    words: [
                                      {(diff)}
                                      {(-c)}
                                      {(DQ ($ VSub_Number '$0'))}
                                      {(DQ ($ VSub_Number '$0'))}
                                    ]
                                    redirects: [
                                      (Redir
                                        op_id: Redir_Less
                                        fd: 16777215
                                        arg_word: {(/dev/null)}
                                        spids: [1580]
                                      )
                                    ]
                                  )
                                ]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [1561 1583]
                          )
                        }
                      spids: [1560]
                    )
                  ]
                  spids: [1560]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-z)} {(DQ ($ VSub_Name '$diff_out_'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (FuncDef
                      name: compare_
                      body: 
                        (BraceGroup
                          children: [
                            (Sentence
                              child: (C {(diff)} {(-c)} {(DQ ($ VSub_At '$@'))})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [1608]
                        )
                      spids: [1603 1607]
                    )
                  ]
                  spids: [16777215 1600]
                )
              ]
              else_action: [
                (FuncDef
                  name: compare_
                  body: 
                    (BraceGroup
                      children: [
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (SimpleCommand
                                      words: [{(diff)} {(-c)} {(DQ ($ VSub_At '$@'))}]
                                      redirects: [
                                        (Redir
                                          op_id: Redir_Great
                                          fd: 16777215
                                          arg_word: {(diff.out)}
                                          spids: [1644]
                                        )
                                      ]
                                    )
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              action: [(C {(rm)} {(-f)} {(diff.out)}) (C {(true)})]
                              spids: [16777215 1649]
                            )
                          ]
                          else_action: [
                            (C {(cat)} {(diff.out)})
                            (C {(rm)} {(-f)} {(diff.out)})
                            (C {(false)})
                          ]
                          spids: [1674 1692]
                        )
                      ]
                      spids: [1631]
                    )
                  spids: [1625 1629]
                )
              ]
              spids: [1622 1698]
            )
          ]
          spids: [1558 1586]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (Subshell
                  child: 
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [{(cmp)} {(--version)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Less
                              fd: 16777215
                              arg_word: {(/dev/null)}
                              spids: [1708]
                            )
                            (Redir
                              op_id: Redir_GreatAnd
                              fd: 2
                              arg_word: {(1)}
                              spids: [1712]
                            )
                          ]
                        )
                        (C {(grep)} {(GNU)})
                      ]
                      negated: F
                    )
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [1723]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[1727])
                  ]
                  spids: [1702 1721]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (FuncDef
              name: compare_
              body: 
                (BraceGroup
                  children: [
                    (Sentence
                      child: (C {(cmp)} {(-s)} {(DQ ($ VSub_At '$@'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [1739]
                )
              spids: [1734 1738]
            )
          ]
          spids: [1700 1731]
        )
      ]
      else_action: [
        (FuncDef
          name: compare_
          body: 
            (BraceGroup
              children: [(Sentence child:(C {(cmp)} {(DQ ($ VSub_At '$@'))}) terminator:<Op_Semi ';'>)]
              spids: [1760]
            )
          spids: [1755 1759]
        )
      ]
      spids: [1752 1771]
    )
    (FuncDef
      name: compare
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(compare_dev_null_)} {(DQ ($ VSub_At '$@'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 1815]
                )
              ]
              else_action: [
                (Case
                  to_match: {($ VSub_QMark '$?')}
                  arms: [
                    (case_arm
                      pat_list: [{(1)}]
                      action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})]
                      spids: [1833 1834 1839 16777215]
                    )
                    (case_arm
                      pat_list: [{(Lit_Other '*')}]
                      action: [(C {(compare_)} {(DQ ($ VSub_At '$@'))})]
                      spids: [1842 1843 1850 16777215]
                    )
                  ]
                  spids: [1826 1830 1853]
                )
              ]
              spids: [1823 1856]
            )
          ]
          spids: [1791]
        )
      spids: [1786 1790]
    )
    (FuncDef
      name: testdir_prefix_
      body: 
        (BraceGroup
          children: [(Sentence child:(C {(printf)} {(gt)}) terminator:<Op_Semi ';'>)]
          spids: [1869]
        )
      spids: [1864 1868]
    )
    (FuncDef
      name: remove_tmp_
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:__st)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                  spids: [1893]
                )
              ]
              spids: [1893]
            )
            (C {(cleanup_)})
            (AndOr
              ops: [Op_DPipe Op_DPipe]
              children: [
                (C {(cd)} {(DQ ($ VSub_Name '$initial_cwd_'))})
                (C {(cd)} {(/)})
                (C {(cd)} {(/tmp)})
              ]
            )
            (C {(chmod)} {(-R)} {(u) (Lit_Other '+') (rwx)} {(DQ ($ VSub_Name '$test_dir_'))})
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(rm)} {(-rf)} {(DQ ($ VSub_Name '$test_dir_'))})
                (BraceGroup
                  children: [
                    (Sentence
                      child: 
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test)} {($ VSub_Name '$__st')} {(Lit_Other '=')} {(0)})
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:__st)
                                  op: Equal
                                  rhs: {(1)}
                                  spids: [1962]
                                )
                              ]
                              spids: [1962]
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [1950]
                )
              ]
            )
            (ControlFlow token:<ControlFlow_Exit exit> arg_word:{($ VSub_Name '$__st')})
          ]
          spids: [1890]
        )
      spids: [1885 1889]
    )
    (FuncDef
      name: find_exe_basenames_
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feb_dir_)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1996]
                )
              ]
              spids: [1996]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:feb_fail_) op:Equal rhs:{(0)} spids:[2000])]
              spids: [2000]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feb_result_)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2004]
                )
              ]
              spids: [2004]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:feb_sp_)
                  op: Equal
                  rhs: {(EmptyPart)}
                  spids: [2007]
                )
              ]
              spids: [2007]
            )
            (ForEach
              iter_name: feb_file_
              iter_words: [{($ VSub_Name '$feb_dir_') (/) (Lit_Other '*') (.exe)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      ops: [Op_DAmp Op_DAmp]
                      children: [
                        (C {(test)} {(DQ (x) ($ VSub_Name '$feb_file_'))} {(Lit_Other '=')} 
                          {(DQ (x) ($ VSub_Name '$feb_dir_') ('/*.exe'))}
                        )
                        (C {(test)} {(KW_Bang '!')} {(-f)} {(DQ ($ VSub_Name '$feb_file_'))})
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(DQ (x) ($ VSub_Name '$feb_file_'))} {(Lit_Other '=')} 
                          {(DQ (x) ($ VSub_Name '$feb_dir_') ('/[.exe'))}
                        )
                        (ControlFlow token:<ControlFlow_Continue continue>)
                      ]
                    )
                    (Case
                      to_match: {($ VSub_Name '$feb_file_')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Lit_Other '*') (Lit_Other '[') (KW_Bang '!') (-a-zA-Z/0-9_.) 
                              (Lit_Other '+') (Lit_Other ']') (Lit_Other '*')
                            }
                          ]
                          action: [
                            (Sentence
                              child: 
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:feb_fail_)
                                      op: Equal
                                      rhs: {(1)}
                                      spids: [2115]
                                    )
                                  ]
                                  spids: [2115]
                                )
                              terminator: <Op_Semi ';'>
                            )
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                          spids: [2106 2113 2120 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:feb_file_)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name feb_file_>
                                        suffix_op: 
                                          (StringUnary
                                            op_id: VOp1_DPound
                                            arg_word: {('*') (Lit_Slash /)}
                                          )
                                        spids: [2131 2136]
                                      )
                                    }
                                  spids: [2130]
                                )
                              ]
                              spids: [2130]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:feb_file_)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name feb_file_>
                                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.exe)})
                                        spids: [2140 2144]
                                      )
                                    }
                                  spids: [2139]
                                )
                              ]
                              spids: [2139]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:feb_result_)
                                  op: Equal
                                  rhs: 
                                    {
                                      (DQ ($ VSub_Name '$feb_result_') ($ VSub_Name '$feb_sp_') 
                                        ($ VSub_Name '$feb_file_')
                                      )
                                    }
                                  spids: [2147]
                                )
                              ]
                              spids: [2147]
                            )
                          ]
                          spids: [2123 2124 2153 16777215]
                        )
                      ]
                      spids: [2099 2103 2156]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:feb_sp_)
                          op: Equal
                          rhs: {(SQ <' '>)}
                          spids: [2159]
                        )
                      ]
                      spids: [2159]
                    )
                  ]
                  spids: [2022 2165]
                )
              spids: [2015 2020]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {($ VSub_Name '$feb_fail_')} {(Lit_Other '=')} {(0)})
                (C {(printf)} {(Lit_Other '%') (s)} {(DQ ($ VSub_Name '$feb_result_'))})
              ]
            )
            (ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {($ VSub_Name '$feb_fail_')}
            )
          ]
          spids: [1993]
        )
      spids: [1988 1992]
    )
    (FuncDef
      name: create_exe_shims_
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$EXEEXT')}
              arms: [
                (case_arm
                  pat_list: [{(SQ )}]
                  action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})]
                  spids: [16777215 2227 2233 16777215]
                )
                (case_arm pat_list:[{(.exe)}] spids:[2236 2237 2239 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [
                            {(echo)}
                            {
                              (DQ ($ VSub_Number '$0') (': unexpected ') 
                                (EscapedLiteralPart
                                  token: <Lit_EscapedChar '\\$'>
                                ) ('EXEEXT value: ') ($ VSub_Name '$EXEEXT')
                              )
                            }
                          ]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[2255])]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
                  ]
                  spids: [2242 2243 2263 16777215]
                )
              ]
              spids: [2218 2222 2266]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:base_names_)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(find_exe_basenames_)} {($ VSub_Number '$1')})]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [2271 2275]
                          )
                        }
                      spids: [2270]
                    )
                  ]
                  spids: [2270]
                )
                (BraceGroup
                  children: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [
                            {(echo)}
                            {
                              (DQ ($ VSub_Number '$0') (' (exe_shim): skipping directory: ') 
                                ($ VSub_Number '$1')
                              )
                            }
                          ]
                          redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[2291])]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Sentence
                      child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [2281]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-n)} {(DQ ($ VSub_Name '$base_names_'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (ForEach
                      iter_name: base_
                      iter_words: [{($ VSub_Name '$base_names_')}]
                      do_arg_iter: F
                      body: 
                        (DoGroup
                          children: [
                            (C {(alias)} 
                              {(DQ ($ VSub_Name '$base_')) (Lit_Other '=') 
                                (DQ ($ VSub_Name '$base_') ($ VSub_Name '$EXEEXT'))
                              }
                            )
                          ]
                          spids: [2327 2342]
                        )
                      spids: [2323 2325]
                    )
                  ]
                  spids: [16777215 2315]
                )
              ]
              spids: [16777215 2345]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})
          ]
          spids: [2215]
        )
      spids: [2210 2214]
    )
    (FuncDef
      name: path_prepend_
      body: 
        (BraceGroup
          children: [
            (While
              cond: [
                (Sentence
                  child: (C {(test)} {($ VSub_Pound '$#')} {(KW_Bang '!') (Lit_Other '=')} {(0)})
                  terminator: <Op_Semi ';'>
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path_dir_)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [2385]
                        )
                      ]
                      spids: [2385]
                    )
                    (Case
                      to_match: {($ VSub_Name '$path_dir_')}
                      arms: [
                        (case_arm
                          pat_list: [{(SQ )}]
                          action: [
                            (C {(fail_)} {(DQ ("invalid path dir: '") ($ VSub_Number '$1') ("'"))})
                          ]
                          spids: [16777215 2398 2407 16777215]
                        )
                        (case_arm
                          pat_list: [{(/) (Lit_Other '*')}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:abs_path_dir_)
                                  op: Equal
                                  rhs: {($ VSub_Name '$path_dir_')}
                                  spids: [2414]
                                )
                              ]
                              spids: [2414]
                            )
                          ]
                          spids: [2410 2412 2416 16777215]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other '*')}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:abs_path_dir_)
                                  op: Equal
                                  rhs: {($ VSub_Name '$initial_cwd_') (/) ($ VSub_Name '$path_dir_')}
                                  spids: [2422]
                                )
                              ]
                              spids: [2422]
                            )
                          ]
                          spids: [2419 2420 2426 16777215]
                        )
                      ]
                      spids: [2389 2393 2429]
                    )
                    (Case
                      to_match: {($ VSub_Name '$abs_path_dir_')}
                      arms: [
                        (case_arm
                          pat_list: [{(Lit_Other '*') (Lit_Other ':') (Lit_Other '*')}]
                          action: [
                            (C {(fail_)} 
                              {(DQ ("invalid path dir: '") ($ VSub_Name '$abs_path_dir_') ("'"))}
                            )
                          ]
                          spids: [2439 2442 2451 16777215]
                        )
                      ]
                      spids: [2432 2436 2454]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PATH)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$abs_path_dir_') (':') ($ VSub_Name '$PATH'))}
                          spids: [2457]
                        )
                      ]
                      spids: [2457]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(create_exe_shims_)} {(DQ ($ VSub_Name '$abs_path_dir_'))})
                        (C {(fail_)} 
                          {(DQ ('something failed (above): ') ($ VSub_Name '$abs_path_dir_'))}
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                  spids: [2382 2491]
                )
            )
            (C {(export)} {(PATH)})
          ]
          spids: [2367]
        )
      spids: [2362 2366]
    )
    (FuncDef
      name: setup_
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(DQ ($ VSub_Name '$VERBOSE'))} {(Lit_Other '=')} {(yes)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {($ VSub_Name '$gl_set_x_corrupts_stderr_')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(warn_)} 
                              {
                                (DQ ('using SHELL=') ($ VSub_Name '$SHELL') 
                                  (" with 'set -x' corrupts stderr")
                                )
                              }
                            )
                          ]
                          spids: [16777215 2550]
                        )
                      ]
                      else_action: [(C {(set)} {(-x)})]
                      spids: [2562 2570]
                    )
                  ]
                  spids: [16777215 2522]
                )
              ]
              spids: [16777215 2573]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:initial_cwd_)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD')}
                  spids: [2577]
                )
              ]
              spids: [2577]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(0)} spids:[2581])]
              spids: [2581]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pfx_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(testdir_prefix_)})])
                        left_token: <Left_Backtick '`'>
                        spids: [2587 2589]
                      )
                    }
                  spids: [2586]
                )
              ]
              spids: [2586]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:test_dir_)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(mktempd_)} {(DQ ($ VSub_Name '$initial_cwd_'))} 
                                    {(DQ ($ VSub_Name '$pfx_') (-) ($ VSub_Name '$ME_') (.XXXX))}
                                  )
                                ]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [2593 2606]
                          )
                        }
                      spids: [2592]
                    )
                  ]
                  spids: [2592]
                )
                (C {(fail_)} 
                  {(DQ ('failed to create temporary directory in ') ($ VSub_Name '$initial_cwd_'))}
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(cd)} {(DQ ($ VSub_Name '$test_dir_'))})
                (C {(fail_)} {(DQ ('failed to cd to temporary directory'))})
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:gl_init_sh_nl_)
                  op: Equal
                  rhs: {(SQ <'\n'>)}
                  spids: [2644]
                )
              ]
              spids: [2644]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IFS)
                  op: Equal
                  rhs: {(DQ (' ')) (DQ ('\t') ($ VSub_Name '$gl_init_sh_nl_'))}
                  spids: [2650]
                )
              ]
              spids: [2650]
            )
            (ForEach
              iter_name: sig_
              iter_words: [{(1)} {(2)} {(3)} {(13)} {(15)}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (C {(eval)} 
                      {
                        (DQ ("trap 'Exit ") 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(expr)} {($ VSub_Name '$sig_')} {(Lit_Other '+')} {(128)})
                                ]
                              )
                            left_token: <Left_CommandSub '$('>
                            spids: [2697 2705]
                          ) ("' ") ($ VSub_Name '$sig_')
                        )
                      }
                    )
                  ]
                  spids: [2690 2711]
                )
              spids: [2678 2688]
            )
          ]
          spids: [2506]
        )
      spids: [2501 2505]
    )
    (FuncDef
      name: rand_bytes_
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:n_)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [2770]
                )
              ]
              spids: [2770]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:chars_)
                  op: Equal
                  rhs: {(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)}
                  spids: [2784]
                )
              ]
              spids: [2784]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dev_rand_)
                  op: Equal
                  rhs: {(/dev/urandom)}
                  spids: [2788]
                )
              ]
              spids: [2788]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: (C {(test)} {(-r)} {(DQ ($ VSub_Name '$dev_rand_'))})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Pipeline
                      children: [
                        (SimpleCommand
                          words: [
                            {(dd)}
                            {(Lit_VarLike 'ibs=') ($ VSub_Name '$n_')}
                            {(Lit_VarLike 'count=') (1)}
                            {(Lit_VarLike 'if=') ($ VSub_Name '$dev_rand_')}
                          ]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: 2
                              arg_word: {(/dev/null)}
                              spids: [2821]
                            )
                          ]
                        )
                        (SimpleCommand
                          words: [
                            {(tr)}
                            {(-c)}
                            {($ VSub_Name '$chars_')}
                            {(01234567) ($ VSub_Name '$chars_') ($ VSub_Name '$chars_') 
                              ($ VSub_Name '$chars_')
                            }
                          ]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[2828])]
                        )
                      ]
                      negated: F
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [16777215 2803]
                )
              ]
              spids: [16777215 2846]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:n_plus_50_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(expr)} {($ VSub_Name '$n_')} {(Lit_Other '+')} {(50)})]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2851 2859]
                      )
                    }
                  spids: [2850]
                )
              ]
              spids: [2850]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cmds_)
                  op: Equal
                  rhs: {(SQ <'date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n'>)}
                  spids: [2862]
                )
              ]
              spids: [2862]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:data_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (Subshell
                                    child: (C {(eval)} {(DQ ($ VSub_Name '$cmds_'))})
                                    redirects: [
                                      (Redir
                                        op_id: Redir_GreatAnd
                                        fd: 2
                                        arg_word: {(1)}
                                        spids: [2879]
                                      )
                                    ]
                                    spids: [2871 2877]
                                  )
                                  (C {(gzip)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2869 2886]
                      )
                    }
                  spids: [2868]
                )
              ]
              spids: [2868]
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:len_)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ ($ VSub_Name '$data_'))})
                                          (C {(wc)} {(-c)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [2903 2913]
                              )
                            }
                          spids: [2902]
                        )
                      ]
                      spids: [2902]
                    )
                    (Sentence
                      child: 
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test)} {($ VSub_Name '$n_plus_50_')} {(-le)} {($ VSub_Name '$len_')})
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:data_)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (Subshell
                                            child: 
                                              (CommandList
                                                children: [
                                                  (Sentence
                                                    child: (C {(echo)} {(DQ ($ VSub_Name '$data_'))})
                                                    terminator: <Op_Semi ';'>
                                                  )
                                                  (C {(eval)} {(DQ ($ VSub_Name '$cmds_'))})
                                                ]
                                              )
                                            redirects: [
                                              (Redir
                                                op_id: Redir_GreatAnd
                                                fd: 2
                                                arg_word: {(1)}
                                                spids: [2948]
                                              )
                                            ]
                                            spids: [2933 2946]
                                          )
                                          (C {(gzip)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [2931 2955]
                              )
                            }
                          spids: [2930]
                        )
                      ]
                      spids: [2930]
                    )
                  ]
                  spids: [2899 2958]
                )
            )
            (Pipeline
              children: [
                (C {(echo)} {(DQ ($ VSub_Name '$data_'))})
                (SimpleCommand
                  words: [
                    {(dd)}
                    {(Lit_VarLike 'bs=') (1)}
                    {(Lit_VarLike 'skip=') (50)}
                    {(Lit_VarLike 'count=') ($ VSub_Name '$n_')}
                  ]
                  redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[2983])]
                )
                (SimpleCommand
                  words: [
                    {(tr)}
                    {(-c)}
                    {($ VSub_Name '$chars_')}
                    {(01234567) ($ VSub_Name '$chars_') ($ VSub_Name '$chars_') 
                      ($ VSub_Name '$chars_')
                    }
                  ]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[2990])]
                )
              ]
              negated: F
            )
          ]
          spids: [2767]
        )
      spids: [2762 2766]
    )
    (FuncDef
      name: mktempd_
      body: 
        (BraceGroup
          children: [
            (Case
              to_match: {($ VSub_Pound '$#')}
              arms: [
                (case_arm pat_list:[{(2)}] spids:[3022 3023 3024 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [(C {(fail_)} {(DQ ('Usage: mktempd_ DIR TEMPLATE'))})]
                  spids: [3027 3028 3035 16777215]
                )
              ]
              spids: [3015 3019 3038]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:destdir_)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [3042]
                )
              ]
              spids: [3042]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:template_)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [3046]
                )
              ]
              spids: [3046]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:MAX_TRIES_) op:Equal rhs:{(4)} spids:[3051])]
              spids: [3051]
            )
            (Case
              to_match: {($ VSub_Name '$destdir_')}
              arms: [
                (case_arm pat_list:[{(/)}] spids:[3071 3072 3074 16777215])
                (case_arm
                  pat_list: [{(Lit_Other '*') (/)}]
                  action: [(C {(fail_)} {(DQ ('invalid destination dir: remove trailing slash(es)'))})]
                  spids: [3077 3079 3086 16777215]
                )
              ]
              spids: [3064 3068 3089]
            )
            (Case
              to_match: {($ VSub_Name '$template_')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (XXXX)}]
                  spids: [3100 3102 3104 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (C {(fail_)} 
                      {
                        (DQ ('invalid template: ') ($ VSub_Name '$template_') 
                          (" (must have a suffix of at least 4 X's)")
                        )
                      }
                    )
                  ]
                  spids: [3107 3108 3119 16777215]
                )
              ]
              spids: [3093 3097 3122]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:d)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (Sentence
                                    child: (C {(unset)} {(TMPDIR)})
                                    terminator: <Op_Semi ';'>
                                  )
                                  (BraceGroup
                                    children: [
                                      (Sentence
                                        child: 
                                          (C {(mktemp)} {(-d)} {(-t)} {(-p)} 
                                            {(DQ ($ VSub_Name '$destdir_'))} {(DQ ($ VSub_Name '$template_'))}
                                          )
                                        terminator: <Op_Semi ';'>
                                      )
                                    ]
                                    redirects: [
                                      (Redir
                                        op_id: Redir_Great
                                        fd: 2
                                        arg_word: {(/dev/null)}
                                        spids: [3158]
                                      )
                                    ]
                                    spids: [3137]
                                  )
                                ]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [3131 3160]
                          )
                        }
                      spids: [3130]
                    )
                  ]
                  spids: [3130]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[3166])]
                  spids: [3166]
                )
              ]
            )
            (Case
              to_match: {($ VSub_Name '$d')}
              arms: [
                (case_arm
                  pat_list: [{(DQ ($ VSub_Name '$destdir_')) (Lit_Other '*')}]
                  spids: [3182 3185 3186 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[3191])]
                      spids: [3191]
                    )
                  ]
                  spids: [3188 3189 3193 16777215]
                )
              ]
              spids: [3175 3179 3195]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(test)} {(-d)} {(DQ ($ VSub_Name '$d'))})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[3213])]
                  spids: [3213]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:perms)
                      op: Equal
                      rhs: 
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (Pipeline
                                    children: [
                                      (SimpleCommand
                                        words: [{(ls)} {(-dgo)} {(DQ ($ VSub_Name '$d'))}]
                                        redirects: [
                                          (Redir
                                            op_id: Redir_Great
                                            fd: 2
                                            arg_word: {(/dev/null)}
                                            spids: [3232]
                                          )
                                        ]
                                      )
                                      (C {(tr)} {(S)} {(-)})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                            left_token: <Left_Backtick '`'>
                            spids: [3223 3240]
                          )
                        }
                      spids: [3222]
                    )
                  ]
                  spids: [3222]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[3244])]
                  spids: [3244]
                )
              ]
            )
            (Case
              to_match: {($ VSub_Name '$perms')}
              arms: [
                (case_arm
                  pat_list: [{(drwx------) (Lit_Other '*')}]
                  spids: [3254 3256 3258 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[3263])]
                      spids: [3263]
                    )
                  ]
                  spids: [3260 3261 3265 16777215]
                )
              ]
              spids: [3248 3252 3267]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {($ VSub_Name '$fail')} {(Lit_Other '=')} {(0)})
                (BraceGroup
                  children: [
                    (C {(echo)} {(DQ ($ VSub_Name '$d'))})
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [3281]
                )
              ]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_template_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ VSub_Name '$template_'))})
                                  (C {(sed)} {(SQ <'s/XX*$//'>)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [3308 3320]
                      )
                    }
                  spids: [3307]
                )
              ]
              spids: [3307]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:template_length_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ VSub_Name '$template_'))})
                                  (C {(wc)} {(-c)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [3329 3341]
                      )
                    }
                  spids: [3328]
                )
              ]
              spids: [3328]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:nx_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(echo)} {(DQ ($ VSub_Name '$base_template_'))})
                                  (C {(wc)} {(-c)})
                                ]
                                negated: F
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [3345 3357]
                      )
                    }
                  spids: [3344]
                )
              ]
              spids: [3344]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:nx_)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(expr)} {($ VSub_Name '$template_length_')} {(-)} 
                                {($ VSub_Name '$nx_')}
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [3361 3369]
                      )
                    }
                  spids: [3360]
                )
              ]
              spids: [3360]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:err_) op:Equal rhs:{(EmptyPart)} spids:[3373])]
              spids: [3373]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:i_) op:Equal rhs:{(1)} spids:[3376])]
              spids: [3376]
            )
            (While
              cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:X_)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(rand_bytes_)} {($ VSub_Name '$nx_')})]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [3389 3393]
                              )
                            }
                          spids: [3388]
                        )
                      ]
                      spids: [3388]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:candidate_dir_)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name '$destdir_') (/) ($ VSub_Name '$base_template_') 
                                ($ VSub_Name '$X_')
                              )
                            }
                          spids: [3396]
                        )
                      ]
                      spids: [3396]
                    )
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:err_)
                              op: Equal
                              rhs: 
                                {
                                  (CommandSubPart
                                    command_list: 
                                      (CommandList
                                        children: [
                                          (SimpleCommand
                                            words: [
                                              {(mkdir)}
                                              {(-m)}
                                              {(0700)}
                                              {(DQ ($ VSub_Name '$candidate_dir_'))}
                                            ]
                                            redirects: [
                                              (Redir
                                                op_id: Redir_GreatAnd
                                                fd: 2
                                                arg_word: {(1)}
                                                spids: [3417]
                                              )
                                            ]
                                          )
                                        ]
                                      )
                                    left_token: <Left_Backtick '`'>
                                    spids: [3406 3419]
                                  )
                                }
                              spids: [3405]
                            )
                          ]
                          spids: [3405]
                        )
                        (BraceGroup
                          children: [
                            (Sentence
                              child: (C {(echo)} {(DQ ($ VSub_Name '$candidate_dir_'))})
                              terminator: <Op_Semi ';'>
                            )
                            (Sentence
                              child: (ControlFlow token:<ControlFlow_Return return>)
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          spids: [3425]
                        )
                      ]
                    )
                    (Sentence
                      child: 
                        (AndOr
                          ops: [Op_DAmp]
                          children: [
                            (C {(test)} {($ VSub_Name '$MAX_TRIES_')} {(-le)} {($ VSub_Name '$i_')})
                            (ControlFlow token:<ControlFlow_Break break>)
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:i_)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(expr)} {($ VSub_Name '$i_')} {(Lit_Other '+')} {(1)})
                                    ]
                                  )
                                left_token: <Left_Backtick '`'>
                                spids: [3455 3463]
                              )
                            }
                          spids: [3454]
                        )
                      ]
                      spids: [3454]
                    )
                  ]
                  spids: [3385 3466]
                )
            )
            (C {(fail_)} {(DQ ($ VSub_Name '$err_'))})
          ]
          spids: [3012]
        )
      spids: [3007 3011]
    )
    (AndOr
      ops: [Op_DAmp]
      children: [
        (C {(test)} {(-f)} {(DQ ($ VSub_Name '$srcdir') (/init.cfg))})
        (C {(.)} {(DQ ($ VSub_Name '$srcdir') (/init.cfg))})
      ]
    )
    (C {(setup_)} {(DQ ($ VSub_At '$@'))})
    (C {(trap)} {(remove_tmp_)} {(0)})
  ]
)