(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:TIMEFORMAT) op:Equal rhs:{(SQ <'%R'>)} spids:[34])]
      spids: [32]
    )
    (FuncDef
      name: strace-callback
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(DQ ($ VSub_At '$@'))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[107])]
                )
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
          ]
          spids: [98]
        )
      spids: [94 97]
    )
    (FuncDef
      name: time-callback
      body: 
        (BraceGroup
          children: [
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(DQ ($ VSub_At '$@'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [132]
                    )
                  ]
                )
            )
          ]
          spids: [123]
        )
      spids: [119 122]
    )
    (FuncDef
      name: compare
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:callback)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(strace-callback)})
                        spids: [148 152]
                      )
                    }
                  spids: [147]
                )
              ]
              spids: [145]
            )
            (ForEach
              iter_name: sh
              iter_words: [{(bash)} {(dash)} {(mksh)} {(zsh)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$sh')})
                    (C {($ VSub_Name '$callback')} {($ VSub_Name '$sh')} {(-c)} 
                      {(SQ <'echo "hi" > /dev/null'>)}
                    )
                    (C {(echo)})
                  ]
                  spids: [175 197]
                )
              spids: [165 173]
            )
            (ForEach
              iter_name: awk
              iter_words: [{(gawk)} {(mawk)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$awk')})
                    (SimpleCommand
                      words: [
                        {($ VSub_Name '$callback')}
                        {($ VSub_Name '$awk')}
                        {(SQ <'{ print "hi" } '>)}
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Less
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [232]
                        )
                      ]
                    )
                    (C {(echo)})
                  ]
                  spids: [216 240]
                )
              spids: [210 214]
            )
            (If
              arms: [
                (if_arm
                  cond: [(Sentence child:(C {(which)} {(lua)}) terminator:<Op_Semi ';'>)]
                  action: [
                    (C {(echo)} {(lua)})
                    (C {($ VSub_Name '$callback')} {(lua)} {(-e)} {(SQ <'print "hi"'>)})
                    (C {(echo)})
                  ]
                  spids: [16777215 251]
                )
              ]
              spids: [16777215 273]
            )
            (C {(echo)} {(perl)})
            (C {($ VSub_Name '$callback')} {(perl)} {(-e)} {(SQ <'print "hi\\n"'>)})
            (C {(echo)})
            (If
              arms: [
                (if_arm
                  cond: [(Sentence child:(C {(which)} {(ruby)}) terminator:<Op_Semi ';'>)]
                  action: [
                    (C {(echo)} {(ruby)})
                    (C {($ VSub_Name '$callback')} {(ruby)} {(-e)} {(SQ <'print "hi\\n"'>)})
                    (C {(echo)})
                  ]
                  spids: [16777215 308]
                )
              ]
              spids: [16777215 330]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$py')} {(-S)})
                    (C {($ VSub_Name '$callback')} {($ VSub_Name '$py')} {(-S)} {(-c)} 
                      {(SQ <'print("hi")'>)}
                    )
                    (C {(echo)})
                  ]
                  spids: [349 375]
                )
              spids: [343 347]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$py')} {(import)})
                    (C {($ VSub_Name '$callback')} {($ VSub_Name '$py')} {(-S)} {(-c)} 
                      {(SQ <'import json;print("hi")'>)}
                    )
                    (C {(echo)})
                  ]
                  spids: [390 416]
                )
              spids: [384 388]
            )
            (ForEach
              iter_name: py
              iter_words: [{(python)} {(python3)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {($ VSub_Name '$py')} {(import)})
                    (C {($ VSub_Name '$callback')} {($ VSub_Name '$py')} {(-S)} {(-c)} 
                      {(SQ <'import json;print("hi")'>)}
                    )
                    (C {(echo)})
                  ]
                  spids: [431 457]
                )
              spids: [425 429]
            )
            (C {(echo)} {(SQ <'Small app.zip'>)})
            (C {($ VSub_Name '$callback')} {(python)} {(-S)} {(_tmp/app.zip)})
            (C {(echo)})
            (C {(echo)} {(SQ <'hello app bundle'>)})
            (AndOr
              children: [(C {($ VSub_Name '$callback')} {(_bin/hello.ovm)}) (C {(true)})]
              op_id: Op_DPipe
            )
            (C {(echo)})
            (C {(echo)} {(SQ <'OSH app bundle true'>)})
            (C {($ VSub_Name '$callback')} {(_bin/true)})
            (C {(echo)})
            (C {(echo)} {(SQ <'OSH app bundle Hello World'>)})
            (C {($ VSub_Name '$callback')} {(_bin/osh)} {(-c)} {(SQ <'echo hi'>)})
            (C {(echo)})
          ]
          spids: [142]
        )
      spids: [138 141]
    )
    (FuncDef
      name: compare-strace
      body: (BraceGroup children:[(C {(compare)} {(strace-callback)})] spids:[548])
      spids: [544 547]
    )
    (FuncDef
      name: compare-time
      body: (BraceGroup children:[(C {(compare)} {(time-callback)})] spids:[562])
      spids: [558 561]
    )
    (FuncDef
      name: import-stats
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(json)})
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(python)} {(-c)} {(SQ <'import json'>)}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[598])]
                )
                (C {(grep)} {(json)})
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
            (C {(echo)} {(nonexistent___)})
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(strace)} {(python)} {(-c)} {(SQ <'import nonexistent___'>)}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[630])]
                )
                (C {(grep)} {(nonexistent___)})
                (C {(wc)} {(-l)})
              ]
              negated: False
            )
          ]
          spids: [576]
        )
      spids: [572 575]
    )
    (FuncDef
      name: make-zip
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(_tmp/app)})
            (C {(rm)} {(-f)} {(_tmp/app.zip)})
            (C {(mkdir)} {(-p)} {(_tmp/app)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/app/lib1.py)}
                  spids: [682]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('print ') (Right_DoubleQuote '"') ('hi from lib1') (Right_DoubleQuote '"') 
                        ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [686]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/app/lib2.py)}
                  spids: [699]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('print ') (Right_DoubleQuote '"') ('hi from lib2') (Right_DoubleQuote '"') 
                        ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [703]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/app/__main__.py)}
                  spids: [716]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('import sys\n') ('sys.path = [sys.argv[0]]\n') ('import lib1\n') 
                        ('import lib2\n') ('print ') (Right_DoubleQuote '"') ('hi from zip') (Right_DoubleQuote '"') ('\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [720]
                )
              ]
            )
            (C {(pushd)} {(_tmp/app)})
            (C {(zip)} {(-r)} {(../app.zip)} {(.)})
            (C {(popd)})
          ]
          spids: [652]
        )
      spids: [648 651]
    )
    (FuncDef
      name: test-zip
      body: (BraceGroup children:[(C {(python)} {(-S)} {(_tmp/app.zip)})] spids:[761])
      spids: [757 760]
    )
    (FuncDef
      name: strace-zip
      body: (BraceGroup children:[(C {(strace)} {(python)} {(-S)} {(_tmp/app.zip)})] spids:[780])
      spids: [776 779]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)