(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (C {(source)} {(test/common.sh)})
    (C {(source)} {(benchmarks/common.sh)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:BASE_DIR) op:Equal rhs:{(_tmp/osh-parser)} spids:[61])]
      spids: [59]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:SORTED)
          op: Equal
          rhs: {($ VSub_Name '$BASE_DIR') (/tmp/sorted.txt)}
          spids: [66]
        )
      ]
      spids: [64]
    )
    (FuncDef
      name: write-sorted-manifest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(benchmarks) (Lit_Slash /) (osh-parser-files.txt)}
                          )
                        spids: [81 87]
                      )
                    }
                  spids: [80]
                )
              ]
              spids: [78]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:counts)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/tmp/line-counts.txt)}
                  spids: [92]
                )
              ]
              spids: [90]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:csv_out)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [99]
                )
              ]
              spids: [97]
            )
            (Pipeline
              children: [
                (C {(grep)} {(-v)} {(SQ <'^#'>)} {($ VSub_Name '$files')})
                (C {(xargs)} {(wc)} {(-l)})
                (SimpleCommand
                  words: [{(sort)} {(-n)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$counts')}
                      spids: [132]
                    )
                  ]
                )
              ]
              negated: F
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$counts')})
                (SimpleCommand
                  words: [{(awk)} {(SQ <'$2 != "total" { print $2 }'>)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$SORTED')}
                      spids: [155]
                    )
                  ]
                )
              ]
              negated: F
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$counts')})
                (SimpleCommand
                  words: [
                    {(awk)}
                    {
                      (SQ <'\n'> <'      BEGIN { print "num_lines,path" }\n'> 
                        <'      $2 != "total" { print $1 "," $2 }'>
                      )
                    }
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$csv_out')}
                      spids: [181]
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
          spids: [75]
        )
      spids: [71 74]
    )
    (FuncDef
      name: parser-task
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [200]
                )
              ]
              spids: [198]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:job_id)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [209]
                )
              ]
              spids: [207]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [215]
                )
              ]
              spids: [213]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:host_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [221]
                )
              ]
              spids: [219]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sh_path)
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [227]
                )
              ]
              spids: [225]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shell_hash)
                  op: Equal
                  rhs: {($ VSub_Number '$6')}
                  spids: [233]
                )
              ]
              spids: [231]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:script_path)
                  op: Equal
                  rhs: {($ VSub_Number '$7')}
                  spids: [239]
                )
              ]
              spids: [237]
            )
            (C {(echo)} 
              {(DQ ('--- ') ($ VSub_Name '$sh_path') (' ') ($ VSub_Name '$script_path') (' ---'))}
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_out)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) ($ VSub_Name '$job_id') 
                        (.times.csv)
                      )
                    }
                  spids: [258]
                )
              ]
              spids: [256]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_out_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$host') (.) ($ VSub_Name '$job_id') 
                        (.virtual-memory)
                      )
                    }
                  spids: [271]
                )
              ]
              spids: [269]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$vm_out_dir')})
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:shell_name) op:Equal spids:[292])]
              spids: [290]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:shell_name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$sh_path')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [296 300]
                      )
                    }
                  spids: [295]
                )
              ]
              spids: [295]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:extra_args) op:Equal rhs:{(SQ )} spids:[308])]
              spids: [308]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ ($ VSub_Name '$shell_name'))} {(Lit_Other '=')} {(SQ <osh>)})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:script_name) op:Equal spids:[333])]
                      spids: [331]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [(assign_pair lhs:(LhsName name:vm_out_path) op:Equal spids:[338])]
                      spids: [336]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:script_name)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(basename)} {($ VSub_Name '$script_path')})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [342 346]
                              )
                            }
                          spids: [341]
                        )
                      ]
                      spids: [341]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:vm_out_path)
                          op: Equal
                          rhs: 
                            {
                              (DQ (${ VSub_Name vm_out_dir) (/) (${ VSub_Name shell_name) (-) 
                                (${ VSub_Name shell_hash) (__) (${ VSub_Name script_name) (.txt)
                              )
                            }
                          spids: [349]
                        )
                      ]
                      spids: [349]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extra_args)
                          op: Equal
                          rhs: 
                            {
                              (DQ ('--ast-format none --parser-mem-dump ') 
                                ($ VSub_Name '$vm_out_path')
                              )
                            }
                          spids: [370]
                        )
                      ]
                      spids: [370]
                    )
                  ]
                  spids: [16777215 328]
                )
              ]
              spids: [16777215 382]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(benchmarks/time.py)} {(--output)} {($ VSub_Name '$times_out')} {(--field)} 
                  {(DQ ($ VSub_Name '$host'))} {(--field)} {(DQ ($ VSub_Name '$host_hash'))} {(--field)} {(DQ ($ VSub_Name '$shell_name'))} {(--field)} 
                  {(DQ ($ VSub_Name '$shell_hash'))} {(--field)} {(DQ ($ VSub_Name '$script_path'))} {(--)} {(DQ ($ VSub_Name '$sh_path'))} {(-n)} 
                  {($ VSub_Name '$extra_args')} {(DQ ($ VSub_Name '$script_path'))}
                )
                (C {(echo)} {(FAILED)})
              ]
            )
          ]
          spids: [195]
        )
      spids: [191 194]
    )
    (FuncDef
      name: print-tasks
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [475]
                )
              ]
              spids: [473]
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$provenance')})
                (While
                  cond: [(Sentence child:(C {(read)} {(fields)}) terminator:<Op_Semi ';'>)]
                  body: 
                    (DoGroup
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {($ VSub_Name '$sorted')})
                            (C {(xargs)} {(-n)} {(1)} {(--)} {(echo)} {($ VSub_Name '$fields')})
                          ]
                          negated: F
                        )
                      ]
                      spids: [497 519]
                    )
                )
              ]
              negated: F
            )
          ]
          spids: [470]
        )
      spids: [466 469]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:HEADER)
          op: Equal
          rhs: {(SQ <'status,elapsed_secs,host_name,host_hash,shell_name,shell_hash,path'>)}
          spids: [526]
        )
      ]
      spids: [524]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [(assign_pair lhs:(LhsName name:NUM_COLUMNS) op:Equal rhs:{(6)} spids:[534])]
      spids: [532]
    )
    (FuncDef
      name: measure
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:provenance)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [556]
                )
              ]
              spids: [554]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {($ VSub_Name '$BASE_DIR') (Lit_Slash /) (raw)}
                          )
                        spids: [563 569]
                      )
                    }
                  spids: [562]
                )
              ]
              spids: [560]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {($ VSub_Name '$provenance')})]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [580 584]
                      )
                    }
                  spids: [579]
                )
              ]
              spids: [577]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prefix)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name name>
                        suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(.provenance.txt)})
                        spids: [590 594]
                      )
                    }
                  spids: [589]
                )
              ]
              spids: [587]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$prefix') (.times.csv))}
                  spids: [603]
                )
              ]
              spids: [601]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines_out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$raw_dir') (/) ($ VSub_Name '$prefix') (.lines.csv))}
                  spids: [614]
                )
              ]
              spids: [612]
            )
            (C {(mkdir)} {(-p)} 
              (BracedWordTree
                parts: [
                  ($ VSub_Name '$BASE_DIR')
                  (/)
                  (BracedAltPart words:[{(tmp)} {(raw)} {(stage1)}])
                ]
              )
            )
            (C {(write-sorted-manifest)} {(SQ )} {($ VSub_Name '$lines_out')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:sorted)
                  op: Equal
                  rhs: {($ VSub_Name '$SORTED')}
                  spids: [650]
                )
              ]
              spids: [648]
            )
            (SimpleCommand
              words: [{(echo)} {($ VSub_Name '$HEADER')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_out')}
                  spids: [663]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tasks)
                  op: Equal
                  rhs: {($ VSub_Name '$BASE_DIR') (/tasks.txt)}
                  spids: [671]
                )
              ]
              spids: [669]
            )
            (SimpleCommand
              words: [{(print-tasks)} {($ VSub_Name '$provenance')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$tasks')}
                  spids: [680]
                )
              ]
            )
            (Pipeline
              children: [
                (C {(cat)} {($ VSub_Name '$tasks')})
                (C {(xargs)} {(-n)} {($ VSub_Name '$NUM_COLUMNS')} {(--)} {($ VSub_Number '$0')} 
                  {(parser-task)} {($ VSub_Name '$raw_dir')}
                )
              ]
              negated: F
            )
            (C {(cp)} {(-v)} {($ VSub_Name '$provenance')} {($ VSub_Name '$raw_dir')})
          ]
          spids: [551]
        )
      spids: [547 550]
    )
    (FuncDef
      name: fake-other-host
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (osh-parser) (Lit_Slash /) (raw)}
                          )
                        spids: [746 754]
                      )
                    }
                  spids: [745]
                )
              ]
              spids: [743]
            )
            (ForEach
              iter_name: entry
              iter_words: [{($ VSub_Name '$dir') (/lisa) (Lit_Other '*')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:fake)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name entry>
                                suffix_op: 
                                  (PatSub
                                    pat: {(lisa)}
                                    replace: {(flanders)}
                                    do_all: F
                                    do_prefix: F
                                    do_suffix: F
                                  )
                                spids: [774 780]
                              )
                            }
                          spids: [773]
                        )
                      ]
                      spids: [771]
                    )
                    (C {(mv)} {(-v)} {($ VSub_Name '$entry')} {($ VSub_Name '$fake')})
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(test)} {(-f)} {($ VSub_Name '$fake')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(sed)} {(-i)} {(SQ <s/lisa/flanders/g>)} {($ VSub_Name '$fake')})
                          ]
                          spids: [16777215 814]
                        )
                      ]
                      spids: [16777215 828]
                    )
                  ]
                  spids: [768 831]
                )
              spids: [762 766]
            )
          ]
          spids: [740]
        )
      spids: [736 739]
    )
    (FuncDef
      name: stage1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_dir)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (osh-parser) (Lit_Slash /) (raw)}
                          )
                        spids: [856 864]
                      )
                    }
                  spids: [855]
                )
              ]
              spids: [853]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(_tmp/osh-parser/stage1)}
                  spids: [874]
                )
              ]
              spids: [872]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:vm_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/virtual-memory.csv)}
                  spids: [888]
                )
              ]
              spids: [886]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:x)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.virtual-memory)}
                        ]
                      )
                    }
                  spids: [897]
                )
              ]
              spids: [893]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:y)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.virtual-memory)}]
                      )
                    }
                  spids: [910]
                )
              ]
              spids: [906]
            )
            (SimpleCommand
              words: [
                {(benchmarks/virtual_memory.py)}
                {(osh-parser)}
                {
                  (BracedVarSub
                    token: <VSub_Name x>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [923 929]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name y>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [931 937]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$vm_csv')}
                  spids: [939]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:times_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/times.csv)}
                  spids: [947]
                )
              ]
              spids: [945]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:a)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.times.csv)}]
                      )
                    }
                  spids: [960]
                )
              ]
              spids: [956]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:b)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.times.csv)}]
                      )
                    }
                  spids: [973]
                )
              ]
              spids: [969]
            )
            (SimpleCommand
              words: [
                {(csv-concat)}
                {
                  (BracedVarSub
                    token: <VSub_Name a>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [984 990]
                  )
                }
                {
                  (BracedVarSub
                    token: <VSub_Name b>
                    bracket_op: 
                      (ArrayIndex
                        expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                      )
                    spids: [992 998]
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$times_csv')}
                  spids: [1000]
                )
              ]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:raw_data_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/raw-data.csv)}
                  spids: [1012]
                )
              ]
              spids: [1010]
            )
            (BraceGroup
              children: [
                (C {(echo)} {(SQ <path>)})
                (C {(echo)} 
                  {
                    (BracedVarSub
                      token: <VSub_Name a>
                      bracket_op: 
                        (ArrayIndex
                          expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                        )
                      spids: [1028 1034]
                    )
                  }
                )
                (C {(echo)} 
                  {
                    (BracedVarSub
                      token: <VSub_Name b>
                      bracket_op: 
                        (ArrayIndex
                          expr: (ArithUnary op_id:Node_UnaryMinus child:(ArithWord w:{(Lit_Digits 1)}))
                        )
                      spids: [1039 1045]
                    )
                  }
                )
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$raw_data_csv')}
                  spids: [1050]
                )
              ]
              spids: [1017]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines_csv)
                  op: Equal
                  rhs: {($ VSub_Name '$out') (/lines.csv)}
                  spids: [1062]
                )
              ]
              spids: [1060]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:c)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/flanders.) (Lit_Other '*') (.lines.csv)}]
                      )
                    }
                  spids: [1071]
                )
              ]
              spids: [1067]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-a]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:d)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [{($ VSub_Name '$raw_dir') (/lisa.) (Lit_Other '*') (.lines.csv)}]
                      )
                    }
                  spids: [1084]
                )
              ]
              spids: [1080]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:left)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name c>
                        bracket_op: 
                          (ArrayIndex
                            expr: 
                              (ArithUnary
                                op_id: Node_UnaryMinus
                                child: (ArithWord w:{(Lit_Digits 1)})
                              )
                          )
                        spids: [1097 1103]
                      )
                    }
                  spids: [1096]
                )
              ]
              spids: [1094]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:right)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name d>
                        bracket_op: 
                          (ArrayIndex
                            expr: 
                              (ArithUnary
                                op_id: Node_UnaryMinus
                                child: (ArithWord w:{(Lit_Digits 1)})
                              )
                          )
                        spids: [1109 1115]
                      )
                    }
                  spids: [1108]
                )
              ]
              spids: [1106]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [(C {(diff)} {($ VSub_Name '$left')} {($ VSub_Name '$right')})]
                          negated: T
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ('Benchmarks were run on different files (') ($ VSub_Name '$left') (' != ') 
                          ($ VSub_Name '$right') (')')
                        )
                      }
                    )
                  ]
                  spids: [16777215 1130]
                )
              ]
              spids: [16777215 1144]
            )
            (SimpleCommand
              words: [{(cat)} {($ VSub_Name '$left')}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$lines_csv')}
                  spids: [1156]
                )
              ]
            )
            (C {(head)} {($ VSub_Name '$out') (/) (Lit_Other '*')})
            (C {(wc)} {(-l)} {($ VSub_Name '$out') (/) (Lit_Other '*')})
          ]
          spids: [850]
        )
      spids: [846 849]
    )
    (FuncDef
      name: print-report
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1206]
                )
              ]
              spids: [1204]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:base_url)
                  op: Equal
                  rhs: {(SQ <../../web>)}
                  spids: [1212]
                )
              ]
              spids: [1210]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>OSH Parser Performance</title>\n') ('    <script type=') (Right_DoubleQuote '"') (text/javascript) (Right_DoubleQuote '"') (' src=') 
                        (Right_DoubleQuote '"') ($ VSub_Name '$base_url') (/table/table-sort.js) (Right_DoubleQuote '"') ('></script>\n') 
                        ('    <link rel=') (Right_DoubleQuote '"') (stylesheet) (Right_DoubleQuote '"') (' type=') (Right_DoubleQuote '"') (text/css) 
                        (Right_DoubleQuote '"') (' href=') (Right_DoubleQuote '"') ($ VSub_Name '$base_url') (/table/table-sort.css) 
                        (Right_DoubleQuote '"') (' />\n') ('    <link rel=') (Right_DoubleQuote '"') (stylesheet) (Right_DoubleQuote '"') (' type=') 
                        (Right_DoubleQuote '"') (text/css) (Right_DoubleQuote '"') (' href=') (Right_DoubleQuote '"') ($ VSub_Name '$base_url') 
                        (/benchmarks.css) (Right_DoubleQuote '"') (' />\n') ('\n') ('  </head>\n') ('  <body>\n') ('    <p id=') 
                        (Right_DoubleQuote '"') (home-link) (Right_DoubleQuote '"') ('>\n') ('      <a href=') (Right_DoubleQuote '"') (/) 
                        (Right_DoubleQuote '"') ('>oilshell.org</a>\n') ('    </p>\n') ('    <h2>OSH Parser Performance</h2>\n') ('\n') 
                        ('    <p>We run <code>') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('sh -n ') 
                        (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('file</code> for various files under various\n') 
                        ('    shells.  This means that shell startup time is included in the\n') ('    elapsed time measurements, but long files are chosen to minimize its\n') ('    effect.</p>\n') 
                        ('\n') ('    <h3>Parse Time Summary</h3>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1221]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/summary.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    <h3>Memory Used to Parse</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')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1303]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/virtual-memory.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('\n') ('    <h3>Shell and Host Details</h3>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1321]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/shells.csv)})
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/hosts.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('    <h3>Raw Data</h3>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1342]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/raw-data.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('    <h3>Parse Time Breakdown by File</h3>\n') ('\n') 
                        ('    <h4>Elasped Time in milliseconds</h4>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1356]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/elapsed.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('\n') ('    <h4>Parsing Rate in lines/millisecond</h4>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1372]
                )
              ]
            )
            (C {(web/table/csv2html.py)} {($ VSub_Name '$in_dir') (/rate.csv)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('  </body>\n') ('</html>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1387]
                )
              ]
            )
          ]
          spids: [1201]
        )
      spids: [1197 1200]
    )
    (FuncDef
      name: time-test
      body: 
        (BraceGroup
          children: [
            (C {(benchmarks/time.py)} {(--field)} {(bash)} {(--field)} {(foo.txt)} {(--output)} 
              {(_tmp/bench.csv)} {(sleep)} {(0.123)}
            )
            (C {(cat)} {(_tmp/bench.csv)})
          ]
          spids: [1400]
        )
      spids: [1396 1399]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)