(command.CommandList
  children: [
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<nounset>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<pipefail>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <set>
      more_env: []
      words: [{<set>} {<-o>} {<errexit>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {<'test/common.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <source>
      more_env: []
      words: [{<source>} {<'benchmarks/common.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<Id.Lit_VarLike 'BASE_DIR='> <'_tmp/vm-baseline'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <measure>
      name: measure
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'provenance='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'base_dir='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 2>
                    var_name: 2
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {<_tmp> <Id.Lit_Slash '/'> <vm-baseline>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'name='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <basename>
                        more_env: []
                        words: [{<basename>} {($ Id.VSub_DollarName provenance)}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'prefix='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name name>
                    var_name: name
                    suffix_op: (suffix_op.Unary op:<Id.VOp1_Percent '%'> arg_word:{<.provenance.txt>})
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'host='> 
                  (CommandSub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Simple
                        blame_tok: <hostname>
                        more_env: []
                        words: [{<hostname>}]
                        redirects: []
                        do_fork: T
                      )
                    right: <Id.Eof_RParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'out_dir='> 
                  (DQ ($ Id.VSub_DollarName base_dir) <'/'> ($ Id.VSub_DollarName prefix))
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <cat>
                  more_env: []
                  words: [{<cat>} {($ Id.VSub_DollarName provenance)}]
                  redirects: []
                  do_fork: T
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <read>
                              more_env: []
                              words: [
                                {<read>}
                                {<Id.Lit_Underscore _>}
                                {<Id.Lit_Underscore _>}
                                {<Id.Lit_Underscore _>}
                                {<sh_path>}
                                {<shell_hash>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <local>
                          more_env: []
                          words: [
                            {<local>}
                            {<Id.Lit_VarLike 'sh_name='> 
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <basename>
                                    more_env: []
                                    words: [{<basename>} {($ Id.VSub_DollarName sh_path)}]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <local>
                          more_env: []
                          words: [
                            {<local>}
                            {<Id.Lit_VarLike 'out='> 
                              (DQ ($ Id.VSub_DollarName out_dir) <'/'> (${ Id.VSub_Name sh_name) <-> 
                                (${ Id.VSub_Name shell_hash) <.txt>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <Id.VSub_DollarName '$sh_path'>
                          more_env: []
                          words: [
                            {($ Id.VSub_DollarName sh_path)}
                            {<-c>}
                            {(SQ <'sleep 0.001; cat /proc/$$/status'>)}
                          ]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {($ Id.VSub_DollarName out)}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName out_dir) <':'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <ls>
              more_env: []
              words: [{<ls>} {<-l>} {($ Id.VSub_DollarName out_dir)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <demo>
      name: demo
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'job_dirs='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName BASE_DIR) <'/lisa.2017-'> <Id.Lit_Star '*'>}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'dir1='> ($ Id.VSub_DollarName BASE_DIR) <'/stage1'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'dir2='> ($ Id.VSub_DollarName BASE_DIR) <'/stage2'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName dir1)} {($ Id.VSub_DollarName dir2)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <'benchmarks/virtual_memory.py'>
              more_env: []
              words: [
                {<'benchmarks/virtual_memory.py'>}
                {<baseline>}
                {
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name job_dirs>
                    var_name: job_dirs
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: (arith_expr.Unary op_id:Id.Node_UnaryMinus child:{<Id.Lit_Digits 1>})
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName dir1) <'/vm-baseline.csv'>}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <'benchmarks/report.R'>
              more_env: []
              words: [
                {<'benchmarks/report.R'>}
                {<vm-baseline>}
                {($ Id.VSub_DollarName dir1)}
                {($ Id.VSub_DollarName dir2)}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <stage1>
      name: stage1
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<Id.Lit_VarLike 'raw_dir='> 
                  (BracedVarSub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Number 1>
                    var_name: 1
                    suffix_op: 
                      (suffix_op.Unary
                        op: <Id.VTest_ColonHyphen _>
                        arg_word: {($ Id.VSub_DollarName BASE_DIR) <Id.Lit_Slash '/'> <raw>}
                      )
                    right: <Id.Right_DollarBrace '}'>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'out='> ($ Id.VSub_DollarName BASE_DIR) <'/stage1'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'm1='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{<'../benchmark-data/vm-baseline/flanders.'> <Id.Lit_Star '*'>}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'm2='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{<'../benchmark-data/vm-baseline/lisa.'> <Id.Lit_Star '*'>}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [
                {<local>}
                {<-a>}
                {<Id.Lit_VarLike 'latest='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name m1>
                          var_name: m1
                          bracket_op: 
                            (bracket_op.ArrayIndex
                              expr: 
                                (arith_expr.Unary
                                  op_id: Id.Node_UnaryMinus
                                  child: {<Id.Lit_Digits 1>}
                                )
                            )
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name m2>
                          var_name: m2
                          bracket_op: 
                            (bracket_op.ArrayIndex
                              expr: 
                                (arith_expr.Unary
                                  op_id: Id.Node_UnaryMinus
                                  child: {<Id.Lit_Digits 1>}
                                )
                            )
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Pipeline
              children: [
                (command.Simple
                  blame_tok: <'benchmarks/virtual_memory.py'>
                  more_env: []
                  words: [
                    {<'benchmarks/virtual_memory.py'>}
                    {<baseline>}
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name latest>
                          var_name: latest
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <tee>
                  more_env: []
                  words: [{<tee>} {($ Id.VSub_DollarName out) <'/vm-baseline.csv'>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_Pipe _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <print-report>
      name: print-report
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'in_dir='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'base_url='> (SQ <'../../web'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'<!DOCTYPE html>\n'>
                        <'<html>\n'>
                        <'  <head>\n'>
                        <'    <title>Virtual Memory Baseline</title>\n'>
                        <'    <script type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/javascript'>
                        <Id.Right_DoubleQuote '"'>
                        <' src='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/table/table-sort.js'>
                        <Id.Right_DoubleQuote '"'>
                        <'></script>\n'>
                        <'    <link rel='>
                        <Id.Right_DoubleQuote '"'>
                        <stylesheet>
                        <Id.Right_DoubleQuote '"'>
                        <' type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <' href='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/table/table-sort.css'>
                        <Id.Right_DoubleQuote '"'>
                        <' />\n'>
                        <'    <link rel='>
                        <Id.Right_DoubleQuote '"'>
                        <stylesheet>
                        <Id.Right_DoubleQuote '"'>
                        <' type='>
                        <Id.Right_DoubleQuote '"'>
                        <'text/css'>
                        <Id.Right_DoubleQuote '"'>
                        <' href='>
                        <Id.Right_DoubleQuote '"'>
                        ($ Id.VSub_DollarName base_url)
                        <'/benchmarks.css'>
                        <Id.Right_DoubleQuote '"'>
                        <' />\n'>
                        <'\n'>
                        <'  </head>\n'>
                        <'  <body>\n'>
                        <'    <p id='>
                        <Id.Right_DoubleQuote '"'>
                        <home-link>
                        <Id.Right_DoubleQuote '"'>
                        <'>\n'>
                        <'      <a href='>
                        <Id.Right_DoubleQuote '"'>
                        <'/'>
                        <Id.Right_DoubleQuote '"'>
                        <'>oilshell.org</a>\n'>
                        <'    </p>\n'>
                        <'    <h2>Virtual Memory Baseline</h2>\n'>
                        <'\n'>
                        <'    <h3>Memory Used at Startup (MB)</h3>\n'>
                        <'\n'>
                        <
'    <p>Running under <code>osh-ovm</code>.  Memory usage is measured in MB\n'
                        >
                        <'    (powers of 10), not MiB (powers of 2).</p>\n'>
                        <'\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <csv2html>
              more_env: []
              words: [{<csv2html>} {($ Id.VSub_DollarName in_dir) <'/vm-baseline.csv'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'    <!-- <h3>Shell and Host Details</h3> -->\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'  </body>\n'> <'</html>\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <parser-dump-demo>
      name: parser-dump-demo
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'out_dir='> <'_tmp/virtual-memory'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'input='> <'benchmarks/testdata/abuild'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <'bin/osh'>
              more_env: []
              words: [
                {<'bin/osh'>}
                {<--parser-mem-dump>}
                {($ Id.VSub_DollarName out_dir) <'/parser.txt'>}
                {<-n>}
                {<--ast-format>}
                {<none>}
                {($ Id.VSub_DollarName input)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <grep>
              more_env: []
              words: [{<grep>} {(SQ <'^Vm'>)} {($ Id.VSub_DollarName out_dir) <'/parser.txt'>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <runtime-dump-demo>
      name: runtime-dump-demo
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'out_dir='> <'_tmp/virtual-memory'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {($ Id.VSub_DollarName out_dir)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <'bin/osh'>
              more_env: []
              words: [
                {<'bin/osh'>}
                {<--parser-mem-dump>}
                {($ Id.VSub_DollarName out_dir) <'/parser.txt'>}
                {<--runtime-mem-dump>}
                {($ Id.VSub_DollarName out_dir) <'/runtime.txt'>}
                {<-c>}
                {(SQ <'echo $(echo hi)'>)}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <grep>
              more_env: []
              words: [
                {<grep>}
                {(SQ <'^Vm'>)}
                {($ Id.VSub_DollarName out_dir) <'/parser.txt'>}
                {($ Id.VSub_DollarName out_dir) <'/runtime.txt'>}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <Id.Left_DoubleQuote '"'>
      more_env: []
      words: [{(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)