(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-o)} {(nounset)})
    (C {(Id.KW_Set set)} {(-o)} {(pipefail)})
    (C {(Id.KW_Set set)} {(-o)} {(errexit)})
    (C {(source)} {(benchmarks/common.sh)})
    (C {(source)} {(build/common.sh)})
    (C {(readonly)} {(Id.Lit_VarLike 'BASE_DIR=') (_tmp/ovm-build)})
    (C {(readonly)} {(Id.Lit_VarLike 'TAR_DIR=') ($ Id.VSub_DollarName '$PWD') (/_deps/ovm-build)})
    (C {(readonly)} 
      {(Id.Lit_VarLike 'OIL_VERSION=') 
        (command_sub
          left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:139)
          command_list: 
            (command.CommandList
              children: [(C {(head)} {(-n)} {(1)} {(oil-version.txt)})]
            )
        )
      }
    )
    (C {(readonly)} {(-a)} 
      {(Id.Lit_VarLike 'TAR_SUBDIRS=') 
        (sh_array_literal
          left: (Token id:Id.Op_LParen val:'(' span_id:161)
          words: [{(bash-4.4)} {(dash-0.5.9.1)}]
        )
      }
    )
    (command.ShFunction
      name: tarballs
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:185)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 192
                  stdin_parts: [('bash-4.4.tar.gz\n') ('dash-0.5.9.1.tar.gz\n') ('mksh-R56c.tgz\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: download
      body: 
        (command.BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$TAR_DIR')})
            (command.Pipeline
              children: [
                (C {(tarballs)})
                (C {(xargs)} {(-n)} {(1)} {(-I)} {(Id.Lit_LBrace '{') (Id.Lit_RBrace '}')} {(--verbose)} 
                  {(--)} {(wget)} {(--directory)} {($ Id.VSub_DollarName '$TAR_DIR')} 
                  {
                    (SQ 
                      (Token
                        id: Id.Lit_Chars
                        val: 'https://www.oilshell.org/blob/ovm-build/{}'
                        span_id: 238
                      )
                    )
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: extract-other
      body: 
        (command.BraceGroup
          children: [
            (command.TimeBlock
              pipeline: 
                (command.ForEach
                  iter_name: f
                  iter_words: [{($ Id.VSub_DollarName '$TAR_DIR') (/) (Id.Lit_Star '*') (gz)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(tar)} {(-x)} {(--directory)} {($ Id.VSub_DollarName '$TAR_DIR')} {(--file)} 
                          {($ Id.VSub_DollarName '$f')}
                        )
                      ]
                    )
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: extract-oil
      body: 
        (command.BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(-v)} {($ Id.VSub_DollarName '$TAR_DIR') (/oil-) (Id.Lit_Star '*')})
            (C {(tar)} {(-x)} {(--directory)} {($ Id.VSub_DollarName '$TAR_DIR')} {(--file)} 
              {(_release/oil.tar)}
            )
          ]
        )
    )
    (command.ShFunction
      name: sizes-tsv
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} 
              {
                (single_quoted
                  left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:377)
                  tokens: [
                    (Token id:Id.Char_Literals val:host_label span_id:378)
                    (Token id:Id.Char_OneChar val:'\\t' span_id:379)
                    (Token id:Id.Char_Literals val:num_bytes span_id:380)
                    (Token id:Id.Char_OneChar val:'\\t' span_id:381)
                    (Token id:Id.Char_Literals val:path span_id:382)
                  ]
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'host=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:389)
                  command_list: (command.CommandList children:[(C {(hostname)})])
                )
              }
            )
            (C {(find)} {(DQ ($ Id.VSub_At '$@'))} {(-maxdepth)} {(0)} {(-printf)} 
              {
                (DQ ($ Id.VSub_DollarName '$host') (Id.Lit_Other '\\') ('t%s') (Id.Lit_Other '\\') 
                  ('t%p') (Id.Lit_Other '\\') (n)
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: measure-sizes
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'prefix=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:1 span_id:436)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: 
                        {($ Id.VSub_DollarName '$BASE_DIR') (Id.Lit_Slash /) (raw) (Id.Lit_Slash /) 
                          (demo)
                        }
                    )
                )
              }
            )
            (command.Simple
              words: [
                {(sizes-tsv)}
                {($ Id.VSub_DollarName '$TAR_DIR') (/oil-) ($ Id.VSub_DollarName '$OIL_VERSION') 
                  (/_build/oil/bytecode-opy.zip)
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:465)
                  fd: -1
                  arg_word: {(${ Id.VSub_Name prefix) (.bytecode-size.tsv)}
                )
              ]
            )
            (command.Simple
              words: [
                {(sizes-tsv)}
                {($ Id.VSub_DollarName '$BASE_DIR') (/bin/) (Id.Lit_Star '*') (/oil.) (Id.Lit_Star '*')}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:484)
                  fd: -1
                  arg_word: {(${ Id.VSub_Name prefix) (.bin-sizes.tsv)}
                )
              ]
            )
            (command.Simple
              words: [
                {(sizes-tsv)}
                {($ Id.VSub_DollarName '$BASE_DIR') (/bin/) (Id.Lit_Star '*') (/) (Id.Lit_Star '*') (sh)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:504)
                  fd: -1
                  arg_word: {(${ Id.VSub_Name prefix) (.other-shell-sizes.tsv)}
                )
              ]
            )
            (C {(log)} {(DQ ('Wrote ') (${ Id.VSub_Name prefix) ('.*.tsv'))})
          ]
        )
    )
    (command.ShFunction
      name: bytecode-size
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'zip=') (_build/oil/bytecode.zip)})
            (command.Pipeline
              children: [(C {(unzip)} {(-l)} {($ Id.VSub_DollarName '$zip')}) (C {(tail)} {(-n)} {(1)})]
              negated: F
            )
            (C {(ls)} {(-l)} {($ Id.VSub_DollarName '$zip')})
          ]
        )
    )
    (command.ShFunction
      name: clang-oil-dbg
      body: 
        (command.BraceGroup
          children: [
            (C {(make)} {(clean)})
            (command.Simple
              words: [{(make)} {(_build/oil/ovm-dbg)}]
              more_env: [(env_pair name:CC val:{($ Id.VSub_DollarName '$CLANG')} spids:[612])]
            )
          ]
        )
    )
    (command.ShFunction
      name: build-task
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'raw_dir=') ($ Id.VSub_Number '$1')})
            (C {(local)} {(Id.Lit_VarLike 'job_id=') ($ Id.VSub_Number '$2')})
            (C {(local)} {(Id.Lit_VarLike 'host=') ($ Id.VSub_Number '$3')})
            (C {(local)} {(Id.Lit_VarLike 'host_hash=') ($ Id.VSub_Number '$4')})
            (C {(local)} {(Id.Lit_VarLike 'compiler_path=') ($ Id.VSub_Number '$5')})
            (C {(local)} {(Id.Lit_VarLike 'compiler_hash=') ($ Id.VSub_Number '$6')})
            (C {(local)} {(Id.Lit_VarLike 'src_dir=') ($ Id.VSub_Number '$7')})
            (C {(local)} {(Id.Lit_VarLike 'action=') ($ Id.VSub_Number '$8')})
            (C {(local)} 
              {(Id.Lit_VarLike 'times_out=') 
                (DQ ($ Id.VSub_DollarName '$PWD') (/) ($ Id.VSub_DollarName '$raw_dir') (/) 
                  ($ Id.VSub_DollarName '$host') (.) ($ Id.VSub_DollarName '$job_id') (.times.tsv)
                )
              }
            )
            (C {(local)} {(-a)} 
              {(Id.Lit_VarLike 'TIME_PREFIX=') 
                (sh_array_literal
                  left: (Token id:Id.Op_LParen val:'(' span_id:738)
                  words: [
                    {(time-tsv)}
                    {(--output)}
                    {($ Id.VSub_DollarName '$times_out')}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$host'))}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$host_hash'))}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$compiler_path'))}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$compiler_hash'))}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$src_dir'))}
                    {(--field)}
                    {(DQ ($ Id.VSub_DollarName '$action'))}
                  ]
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'bin_base_dir=') ($ Id.VSub_DollarName '$PWD') (/) 
                ($ Id.VSub_DollarName '$BASE_DIR') (/bin)
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'bin_dir=') 
                (DQ ($ Id.VSub_DollarName '$bin_base_dir') (/) 
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:810)
                    command_list: 
                      (command.CommandList
                        children: [(C {(basename)} {($ Id.VSub_DollarName '$compiler_path')})]
                      )
                  )
                )
              }
            )
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$bin_dir')})
            (command.Simple
              words: [{(pushd)} {($ Id.VSub_DollarName '$src_dir')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:830)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.Case
              to_match: {($ Id.VSub_DollarName '$action')}
              arms: [
                (case_arm
                  pat_list: [{(configure)}]
                  action: [
                    (C 
                      {
                        (DQ 
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:857)
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          )
                        )
                      } {(--)} {(./configure)}
                    )
                    (C {(make)} {(clean)})
                  ]
                  spids: [851 852 887 -1]
                )
                (case_arm
                  pat_list: [{(make)}]
                  action: [
                    (C 
                      {
                        (DQ 
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:897)
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          )
                        )
                      } {(--)} {(make)} {(Id.Lit_VarLike 'CC=') ($ Id.VSub_DollarName '$compiler_path')}
                    )
                    (C {(local)} {(target)})
                    (command.Case
                      to_match: {($ Id.VSub_DollarName '$src_dir')}
                      arms: [
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (/bash) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:target)
                                  op: assign_op.Equal
                                  rhs: {(bash)}
                                  spids: [931]
                                )
                              ]
                            )
                          ]
                          spids: [925 928 935 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*') (/dash) (Id.Lit_Star '*')}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:target)
                                  op: assign_op.Equal
                                  rhs: {(src/dash)}
                                  spids: [944]
                                )
                              ]
                            )
                          ]
                          spids: [938 941 948 -1]
                        )
                      ]
                    )
                    (C {(strip)} {($ Id.VSub_DollarName '$target')})
                    (C {(cp)} {(-v)} {($ Id.VSub_DollarName '$target')} 
                      {($ Id.VSub_DollarName '$bin_dir')}
                    )
                  ]
                  spids: [891 892 969 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (C {(local)} {(Id.Lit_VarLike 'target=') ($ Id.VSub_DollarName '$action')})
                    (C 
                      {
                        (DQ 
                          (braced_var_sub
                            token: (Token id:Id.VSub_Name val:TIME_PREFIX span_id:989)
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          )
                        )
                      } {(--)} {(make)} {(Id.Lit_VarLike 'CC=') ($ Id.VSub_DollarName '$compiler_path')} 
                      {($ Id.VSub_DollarName '$target')}
                    )
                    (C {(cp)} {(-v)} {($ Id.VSub_DollarName '$target')} 
                      {($ Id.VSub_DollarName '$bin_dir')}
                    )
                  ]
                  spids: [973 974 1016 -1]
                )
              ]
            )
            (command.Simple
              words: [{(popd)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1025)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: oil-tasks
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'provenance=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'dir=') 
                (DQ ($ Id.VSub_DollarName '$TAR_DIR') (/oil-) ($ Id.VSub_DollarName '$OIL_VERSION'))
              }
            )
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:1074)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(line)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1079)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))} 
                          {($ Id.VSub_DollarName '$dir')} {(configure)}
                        )
                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))} 
                          {($ Id.VSub_DollarName '$dir')} {(_bin/oil.ovm)}
                        )
                        (C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))} 
                          {($ Id.VSub_DollarName '$dir')} {(_bin/oil.ovm-dbg)}
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: other-shell-tasks
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'provenance=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'tarball=') 
                (SQ (Token id:Id.Lit_Chars val:_release/oil.0.5.alpha1.gz span_id:1152))
              }
            )
            (command.Pipeline
              children: [
                (C {(cat)} {($ Id.VSub_DollarName '$provenance')})
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:1167)
                  cond: [
                    (command.Sentence
                      child: (C {(read)} {(line)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1172)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Case
                          to_match: {($ Id.VSub_DollarName '$line')}
                          arms: [
                            (case_arm
                              pat_list: [{(Id.Lit_Star '*') (clang) (Id.Lit_Star '*')}]
                              action: [
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Continue val:continue span_id:1194)
                                )
                              ]
                              spids: [1188 1191 1197 -1]
                            )
                          ]
                        )
                        (command.ForEach
                          iter_name: dir
                          iter_words: [
                            {
                              (DQ 
                                (braced_var_sub
                                  token: (Token id:Id.VSub_Name val:TAR_SUBDIRS span_id:1212)
                                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                )
                              )
                            }
                          ]
                          do_arg_iter: F
                          body: 
                            (command.DoGroup
                              children: [
                                (C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))} 
                                  {($ Id.VSub_DollarName '$TAR_DIR') (/) ($ Id.VSub_DollarName '$dir')} {(configure)}
                                )
                                (C {(echo)} {(DQ ($ Id.VSub_DollarName '$line'))} 
                                  {($ Id.VSub_DollarName '$TAR_DIR') (/) ($ Id.VSub_DollarName '$dir')} {(make)}
                                )
                              ]
                            )
                        )
                      ]
                    )
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: oil-historical-tasks
      body: (command.BraceGroup children:[(C {(echo)})])
    )
    (C {(readonly)} 
      {(Id.Lit_VarLike 'HEADER=') 
        (single_quoted
          left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:1282)
          tokens: [
            (Token id:Id.Char_Literals val:status span_id:1283)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1284)
            (Token id:Id.Char_Literals val:elapsed_secs span_id:1285)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1286)
            (Token id:Id.Char_Literals val:host_name span_id:1287)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1288)
            (Token id:Id.Char_Literals val:host_hash span_id:1289)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1290)
            (Token id:Id.Char_Literals val:compiler_path span_id:1291)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1292)
            (Token id:Id.Char_Literals val:compiler_hash span_id:1293)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1294)
            (Token id:Id.Char_Literals val:src_dir span_id:1295)
            (Token id:Id.Char_OneChar val:'\\t' span_id:1296)
            (Token id:Id.Char_Literals val:action span_id:1297)
          ]
        )
      }
    )
    (C {(readonly)} {(Id.Lit_VarLike 'NUM_COLUMNS=') (7)})
    (command.ShFunction
      name: measure
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'provenance=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'raw_dir=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:2 span_id:1329)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') (Id.Lit_Slash /) (raw)}
                    )
                )
              }
            )
            (C {(extract-oil)})
            (C {(local)} 
              {(Id.Lit_VarLike 'name=') 
                (command_sub
                  left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1349)
                  command_list: 
                    (command.CommandList
                      children: [(C {(basename)} {($ Id.VSub_DollarName '$provenance')})]
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'prefix=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:name span_id:1360)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VOp1_Percent
                      arg_word: {(.compiler-provenance.txt)}
                    )
                )
              }
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'times_out=') 
                (DQ ($ Id.VSub_DollarName '$raw_dir') (/) ($ Id.VSub_DollarName '$prefix') (.times.tsv))
              }
            )
            (C {(mkdir)} {(-p)} 
              (word.BracedTree
                parts: [
                  ($ Id.VSub_DollarName '$BASE_DIR')
                  (/)
                  (word_part.BracedTuple words:[{(raw)} {(stage1)} {(bin)}])
                ]
              ) {($ Id.VSub_DollarName '$raw_dir')}
            )
            (command.Simple
              words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$HEADER'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1418)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$times_out')}
                )
              ]
            )
            (C {(local)} {(Id.Lit_VarLike 't1=') ($ Id.VSub_DollarName '$BASE_DIR') (/oil-tasks.txt)})
            (C {(local)} 
              {(Id.Lit_VarLike 't2=') ($ Id.VSub_DollarName '$BASE_DIR') (/other-shell-tasks.txt)}
            )
            (command.Simple
              words: [{(oil-tasks)} {($ Id.VSub_DollarName '$provenance')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1443)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$t1')}
                )
              ]
            )
            (command.Simple
              words: [{(other-shell-tasks)} {($ Id.VSub_DollarName '$provenance')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1452)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$t2')}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.TimeBlock
                  pipeline: 
                    (command.Pipeline
                      children: [
                        (C {(cat)} {($ Id.VSub_DollarName '$t1')} {($ Id.VSub_DollarName '$t2')})
                        (C {(xargs)} {(-n)} {($ Id.VSub_DollarName '$NUM_COLUMNS')} {(--)} 
                          {($ Id.VSub_Number '$0')} {(build-task)} {($ Id.VSub_DollarName '$raw_dir')}
                        )
                      ]
                      negated: F
                    )
                )
                (C {(die)} {(DQ ('*** Some tasks failed. ***'))})
              ]
            )
            (C {(measure-sizes)} 
              {($ Id.VSub_DollarName '$raw_dir') (/) ($ Id.VSub_DollarName '$prefix')}
            )
            (C {(cp)} {(-v)} {($ Id.VSub_DollarName '$provenance')} {($ Id.VSub_DollarName '$raw_dir')})
          ]
        )
    )
    (command.ShFunction
      name: stage1
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'raw_dir=') 
                (braced_var_sub
                  token: (Token id:Id.VSub_Number val:1 span_id:1538)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {($ Id.VSub_DollarName '$BASE_DIR') (Id.Lit_Slash /) (raw)}
                    )
                )
              }
            )
            (C {(local)} {(Id.Lit_VarLike 'out=') ($ Id.VSub_DollarName '$BASE_DIR') (/stage1)})
            (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$out')})
            (C {(local)} {(x)})
            (C {(local)} {(-a)} {(a)} {(b)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$out') (/times.tsv)}
                  spids: [1581]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:a)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1587)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/flanders.) (Id.Lit_Star '*') 
                            (.times.tsv)
                          }
                        ]
                      )
                    }
                  spids: [1586]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:b)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1596)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/lisa.) (Id.Lit_Star '*') (.times.tsv)}
                        ]
                      )
                    }
                  spids: [1595]
                )
              ]
            )
            (command.Simple
              words: [
                {(tsv-concat)}
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:a span_id:1607)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:b span_id:1615)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1622)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$x')}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$out') (/bytecode-size.tsv)}
                  spids: [1628]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:a)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1634)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/flanders.) (Id.Lit_Star '*') 
                            (.bytecode-size.tsv)
                          }
                        ]
                      )
                    }
                  spids: [1633]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:b)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1643)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/lisa.) (Id.Lit_Star '*') 
                            (.bytecode-size.tsv)
                          }
                        ]
                      )
                    }
                  spids: [1642]
                )
              ]
            )
            (command.Simple
              words: [
                {(tsv-concat)}
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:a span_id:1654)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:b span_id:1662)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1669)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$x')}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:x)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$out') (/bin-sizes.tsv)}
                  spids: [1675]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:a)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1681)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/flanders.) (Id.Lit_Star '*') 
                            (.bin-sizes.tsv)
                          }
                        ]
                      )
                    }
                  spids: [1680]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:b)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:1690)
                        words: [
                          {($ Id.VSub_DollarName '$raw_dir') (/lisa.) (Id.Lit_Star '*') 
                            (.bin-sizes.tsv)
                          }
                        ]
                      )
                    }
                  spids: [1689]
                )
              ]
            )
            (command.Simple
              words: [
                {(tsv-concat)}
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:a span_id:1701)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
                {
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:b span_id:1709)
                    bracket_op: 
                      (bracket_op.ArrayIndex
                        expr: 
                          (arith_expr.Unary
                            op_id: Id.Node_UnaryMinus
                            child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1716)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$x')}
                )
              ]
            )
            (C {(local)} 
              {(Id.Lit_VarLike 'raw_data_tsv=') ($ Id.VSub_DollarName '$out') (/raw-data.tsv)}
            )
            (command.BraceGroup
              children: [
                (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:path span_id:1738))})
                (C {(echo)} 
                  {
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:a span_id:1745)
                      bracket_op: 
                        (bracket_op.ArrayIndex
                          expr: 
                            (arith_expr.Unary
                              op_id: Id.Node_UnaryMinus
                              child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                            )
                        )
                    )
                  }
                )
                (C {(echo)} 
                  {
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:b span_id:1756)
                      bracket_op: 
                        (bracket_op.ArrayIndex
                          expr: 
                            (arith_expr.Unary
                              op_id: Id.Node_UnaryMinus
                              child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                            )
                        )
                    )
                  }
                )
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1766)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$raw_data_tsv')}
                )
              ]
            )
            (C {(head)} {($ Id.VSub_DollarName '$out') (/) (Id.Lit_Star '*')})
            (C {(wc)} {(-l)} {($ Id.VSub_DollarName '$out') (/) (Id.Lit_Star '*')})
          ]
        )
    )
    (command.ShFunction
      name: print-report
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'in_dir=') ($ Id.VSub_Number '$1')})
            (C {(local)} 
              {(Id.Lit_VarLike 'base_url=') (SQ (Token id:Id.Lit_Chars val:../../web span_id:1807))}
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1814)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1881
                  stdin_parts: [
                    ('<!DOCTYPE html>\n')
                    ('<html>\n')
                    ('  <head>\n')
                    ('    <title>OVM Build Performance</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>OVM Build Performance</h2>\n')
                    ('\n')
                    ('    <h3>Elapsed Time by Host and Compiler</h3>\n')
                    ('\n')
                    (
'    <p>We measure the build speed of <code>bash</code> and <code>dash</code>\n'
                    )
                    ('    for comparison.\n')
                    ('    </p>\n')
                  ]
                )
              ]
            )
            (C {(tsv2html)} {(--css-class-pattern)} 
              {(SQ (Token id:Id.Lit_Chars val:'special ^oil' span_id:1888))} {($ Id.VSub_DollarName '$in_dir') (/times.tsv)}
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1898)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1913
                  stdin_parts: [
                    ('    <h3>Binary Size</h3>\n')
                    ('\n')
                    ('    <p>The oil binary has two portions:\n')
                    ('      <ol>\n')
                    ('        <li>Architecture-independent <code>bytecode.zip</code></li>\n')
                    ('        <li>Architecture- and compiler- dependent native code\n')
                    ('            (<code>_build/oil/ovm*</code>)\n')
                    ('        </li>\n')
                    ('      </ol>\n')
                    ('    </p>\n')
                    ('\n')
                  ]
                )
              ]
            )
            (C {(tsv2html)} {(--css-class-pattern)} 
              {(SQ (Token id:Id.Lit_Chars val:'special /gcc/oil.ovm$' span_id:1924))} {($ Id.VSub_DollarName '$in_dir') (/sizes.tsv)}
            )
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1934)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1940
                  stdin_parts: [('\n') ('    <h3>Host and Compiler Details</h3>\n')]
                )
              ]
            )
            (C {(tsv2html)} {($ Id.VSub_DollarName '$in_dir') (/hosts.tsv)})
            (C {(tsv2html)} {($ Id.VSub_DollarName '$in_dir') (/compilers.tsv)})
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1957)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 1963
                  stdin_parts: [('  </body>\n') ('</html>\n')]
                )
              ]
            )
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)