(CommandList
  children: [
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (C {(set)} {(-o)} {(errexit)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:OIL_VERSION)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(head)} {(-n)} {(1)} {(oil-version.txt)})])
                left_token: <Left_CommandSub '$('>
                spids: [98 106]
              )
            }
          spids: [97]
        )
      ]
      spids: [95]
    )
    (FuncDef
      name: log
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At '$@'))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[122])]
            )
          ]
          spids: [113]
        )
      spids: [109 112]
    )
    (FuncDef
      name: remove-files
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-r)} {(-f)} {(_devbuild)} {(_build)} {(_release)} 
              (BracedWordTree
                parts: [
                  (_tmp/)
                  (BracedAltPart
                    words: [{(spec)} {(wild)} {(unit)} {(gold)} {(osh2oil)}]
                  )
                ]
              ) 
              (BracedWordTree
                parts: [
                  (_tmp/)
                  (BracedAltPart
                    words: [{(osh-parser)} {(osh-runtime)} {(vm-baseline)} {(oheap)}]
                  )
                ]
              ) {(_tmp/metrics)} {(_tmp/oil-tar-test)}
            )
          ]
          spids: [269]
        )
      spids: [265 268]
    )
    (FuncDef
      name: build-and-test
      body: 
        (BraceGroup
          children: [
            (C {(remove-files)})
            (C {(rm)} {(-f)} {(-v)} {(_bin/oil.) (Lit_Other '*')} {(Lit_Other '*') (.so)})
            (C {(build/dev.sh)} {(all)})
            (C {(test/unit.sh)} {(run-for-release)})
            (C {(test/osh2oil.sh)} {(run-for-release)})
            (C {(test/gold.sh)} {(run-for-release)})
            (C {(build/prepare.sh)} {(configure)})
            (C {(build/prepare.sh)} {(build-python)})
            (C {(make)} {(clean)})
            (C {(make)})
            (C {(test/spec.sh)} {(smoke)})
            (C {(test/spec.sh)} {(link-busybox-ash)})
            (C {(test/spec.sh)} {(all)})
            (C {($ VSub_Number '$0')} {(oil)})
            (C {(build/test.sh)} {(oil-tar)})
            (C {(test/alpine.sh)} {(copy-tar)} {(SQ )} {(oil)})
            (C {(test/alpine.sh)} {(test-tar)} {(SQ )} {(oil)})
          ]
          spids: [329]
        )
      spids: [325 328]
    )
    (FuncDef
      name: _compressed-tarball
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 1>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(hello)})
                        spids: [483 487]
                      )
                    }
                  spids: [482]
                )
              ]
              spids: [480]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0.0.0)})
                        spids: [493 497]
                      )
                    }
                  spids: [492]
                )
              ]
              spids: [490]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name '$name') (.tar)}
                  spids: [503]
                )
              ]
              spids: [501]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name '$name') (-) ($ VSub_Name '$version') (.tar.gz)}
                  spids: [511]
                )
              ]
              spids: [509]
            )
            (C {(build/actions.sh)} {(write-release-date)})
            (C {(make)} {($ VSub_Name '$in')})
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(gzip)} {(-c)} {($ VSub_Name '$in')}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$out')}
                      spids: [547]
                    )
                  ]
                )
            )
            (C {(ls)} {(-l)} {($ VSub_Name '$out')})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out2)
                  op: Equal
                  rhs: {(_release/) ($ VSub_Name '$name') (-) ($ VSub_Name '$version') (.tar.xz)}
                  spids: [566]
                )
              ]
              spids: [564]
            )
            (TimeBlock
              pipeline: 
                (SimpleCommand
                  words: [{(xz)} {(-c)} {($ VSub_Name '$in')}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {($ VSub_Name '$out2')}
                      spids: [582]
                    )
                  ]
                )
            )
            (C {(ls)} {(-l)} {($ VSub_Name '$out2')})
          ]
          spids: [477]
        )
      spids: [473 476]
    )
    (FuncDef
      name: oil
      body: 
        (BraceGroup
          children: [(C {(_compressed-tarball)} {(oil)} {($ VSub_Name '$OIL_VERSION')})]
          spids: [600]
        )
      spids: [596 599]
    )
    (FuncDef
      name: hello
      body: 
        (BraceGroup
          children: [
            (C {(_compressed-tarball)} {(hello)} 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(head)} {(-n)} {(1)} {(build/testdata/hello-version.txt)})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [623 631]
                )
              }
            )
          ]
          spids: [616]
        )
      spids: [612 615]
    )
    (FuncDef
      name: escape-segments
      body: 
        (BraceGroup
          children: [
            (C {(python)} {(-c)} 
              {
                (SQ <'\n'> <'import cgi, re, sys\n'> <'\n'> <'print re.sub(\n'> 
                  <'  r"\\x00(.*)\\x01", \n'> <'  lambda match: cgi.escape(match.group(1)),\n'> <'  sys.stdin.read())\n'>
                )
              }
            )
          ]
          spids: [655]
        )
      spids: [651 654]
    )
    (FuncDef
      name: _git-changelog-body
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prev_branch)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [688]
                )
              ]
              spids: [686]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cur_branch)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [694]
                )
              ]
              spids: [692]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:format)
                  op: Equal
                  rhs: 
                    {
                      (SQ <'<tr>\n'> <'    <td><a class="checksum"\n'> 
                        <'           href="https://github.com/oilshell/oil/commit/%H">%h</a>\n'> <'    </td>\n'> <'    <td class="date">%ad</td>\n'> <'    <td>%x00%an%x01</td>\n'> 
                        <'    <td class="subject">%x00%s%x01</td>\n'> <'  </tr>'>
                      )
                    }
                  spids: [718]
                )
              ]
              spids: [716]
            )
            (Pipeline
              children: [
                (C {(git)} {(log)} {($ VSub_Name '$prev_branch') (..) ($ VSub_Name '$cur_branch')} 
                  {(--reverse)} {(--pretty) (Lit_Other '=') (DQ ('format:') ($ VSub_Name '$format'))} 
                  {(--date) (Lit_Other '=') (short)}
                )
                (C {(escape-segments)})
              ]
              negated: F
            )
          ]
          spids: [683]
        )
      spids: [679 682]
    )
    (FuncDef
      name: _git-changelog-header
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:prev_branch)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [778]
                )
              ]
              spids: [776]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cur_branch)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [784]
                )
              ]
              spids: [782]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>Commits Between ') ($ VSub_Name '$prev_branch') (' and ') ($ VSub_Name '$cur_branch') ('</title>\n') ('    <style>\n') 
                        ('      /* Make it centered and skinny for readability */\n') ('      body {\n') ('        margin: 0 auto;\n') ('        width: 60em;\n') ('      }\n') 
                        ('      table {\n') ('        width: 100%;\n') ('      }\n') ('      code {\n') ('        color: green;\n') ('      }\n') 
                        ('      .checksum {\n') ('        font-family: monospace;\n') ('      }\n') ('      .date {\n') 
                        ('        /*font-family: monospace;*/\n') ('      }\n') ('      .subject {\n') ('        font-family: monospace;\n') ('      }\n') ('\n') 
                        ('      /* Copied from oilshell.org bundle.css */\n') ('      .date {\n') ('        font-size: medium;\n') ('        color: #555;\n') 
                        ('        padding-left: 1em;\n') ('      }\n') ('    </style>\n') ('  </head>\n') ('  <body>\n') 
                        ('    <h3>Commits Between Branches <code>') ($ VSub_Name '$prev_branch') ('</code> and\n') ('       <code>') ($ VSub_Name '$cur_branch') 
                        ('</code></h3>\n') ('    <table>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [791]
                )
              ]
            )
          ]
          spids: [773]
        )
      spids: [769 772]
    )
    (FuncDef
      name: _git-changelog
      body: 
        (BraceGroup
          children: [
            (C {(_git-changelog-header)} {(DQ ($ VSub_At '$@'))})
            (C {(_git-changelog-body)} {(DQ ($ VSub_At '$@'))})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('  </table>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [891]
                )
              ]
            )
            (C {(_html-footer)})
          ]
          spids: [872]
        )
      spids: [868 871]
    )
    (FuncDef
      name: git-changelog-0.1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {(SQ <0.1.0>)}
                  spids: [911]
                )
              ]
              spids: [909]
            )
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.0.0)} {(release/0.1.0)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: 
                    {(../oilshell.org__deploy/release/) ($ VSub_Name '$version') (/changelog.html)}
                  spids: [925]
                )
              ]
            )
          ]
          spids: [906]
        )
      spids: [902 905]
    )
    (FuncDef
      name: git-changelog-0.2.alpha1
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.1.0)} {(release/0.2.alpha1)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/changelog.html)}
                  spids: [949]
                )
              ]
            )
          ]
          spids: [938]
        )
      spids: [934 937]
    )
    (FuncDef
      name: git-changelog-0.2.0
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.1.0)} {(release/0.2.0)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/changelog.html)}
                  spids: [971]
                )
              ]
            )
          ]
          spids: [960]
        )
      spids: [956 959]
    )
    (FuncDef
      name: git-changelog-0.3.alpha1
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.2.0)} {(release/0.3.alpha1)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/changelog.html)}
                  spids: [993]
                )
              ]
            )
          ]
          spids: [982]
        )
      spids: [978 981]
    )
    (FuncDef
      name: git-changelog-0.3.0
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.2.0)} {(release/0.3.0)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/changelog.html)}
                  spids: [1015]
                )
              ]
            )
          ]
          spids: [1004]
        )
      spids: [1000 1003]
    )
    (FuncDef
      name: git-changelog-0.4.alpha1
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(_git-changelog)} {(release/0.3.0)} {(release/0.4.alpha1)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/changelog.html)}
                  spids: [1037]
                )
              ]
            )
          ]
          spids: [1026]
        )
      spids: [1022 1025]
    )
    (FuncDef
      name: html-redirect
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:url)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1057]
                )
              ]
              spids: [1055]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') ('    <meta http-equiv=') 
                        (Right_DoubleQuote '"') (refresh) (Right_DoubleQuote '"') (' content=') (Right_DoubleQuote '"') ('0; url=') ($ VSub_Name '$url') 
                        (Right_DoubleQuote '"') (' />\n') ('  </head>\n') ('  <body>\n') ('    <p>Redirect to<a href=') (Right_DoubleQuote '"') 
                        ($ VSub_Name '$url') (Right_DoubleQuote '"') ('>') ($ VSub_Name '$url') ('</a></p>\n') ('  </body>\n') ('</html>  \n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1063]
                )
              ]
            )
          ]
          spids: [1052]
        )
      spids: [1048 1051]
    )
    (FuncDef
      name: no-announcement
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') ('  </head>\n') 
                        ('  <body>\n') ('    <p>No announcement for this release.</p>\n') ('  </body>\n') ('</html>  \n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1103]
                )
              ]
            )
          ]
          spids: [1098]
        )
      spids: [1094 1097]
    )
    (FuncDef
      name: announcement-0.0
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/07/23.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(../oilshell.org__deploy/release/0.0.0/announcement.html)}
                  spids: [1133]
                )
              ]
            )
          ]
          spids: [1122]
        )
      spids: [1118 1121]
    )
    (FuncDef
      name: announcement-0.1
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {(SQ <0.1.0>)}
                  spids: [1149]
                )
              ]
              spids: [1147]
            )
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/09/09.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: 
                    {(../oilshell.org__deploy/release/) ($ VSub_Name '$version') (/announcement.html)}
                  spids: [1163]
                )
              ]
            )
          ]
          spids: [1144]
        )
      spids: [1140 1143]
    )
    (FuncDef
      name: announcement-0.2
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/11/10.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/announcement.html)}
                  spids: [1185]
                )
              ]
            )
          ]
          spids: [1176]
        )
      spids: [1172 1175]
    )
    (FuncDef
      name: announcement-0.3
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(html-redirect)} {(SQ </blog/2017/12/22.html>)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/announcement.html)}
                  spids: [1205]
                )
              ]
            )
          ]
          spids: [1196]
        )
      spids: [1192 1195]
    )
    (FuncDef
      name: announcement-0.4
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(no-announcement)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_release/VERSION/announcement.html)}
                  spids: [1225]
                )
              ]
            )
          ]
          spids: [1220]
        )
      spids: [1216 1219]
    )
    (FuncDef
      name: _link
      body: 
        (BraceGroup
          children: [(C {(ln)} {(-s)} {(-f)} {(-v)} {(--no-target-directory)} {(DQ ($ VSub_At '$@'))})]
          spids: [1236]
        )
      spids: [1232 1235]
    )
    (FuncDef
      name: compress-txt
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1265]
                )
              ]
              spids: [1263]
            )
            (C {(log)} {(DQ ('--- test/') ($ VSub_Name '$name'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/test/) ($ VSub_Name '$name') (.wwz))}
                  spids: [1280]
                )
              ]
              spids: [1278]
            )
            (C {(pushd)} {(_tmp/) ($ VSub_Name '$name')})
            (TimeBlock pipeline:(C {(zip)} {(-r)} {(-q)} {($ VSub_Name '$out')} {(.)}))
            (C {(popd)})
          ]
          spids: [1260]
        )
      spids: [1256 1259]
    )
    (FuncDef
      name: compress
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:root)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD') (/_release/VERSION/)}
                  spids: [1325]
                )
              ]
              spids: [1323]
            )
            (C {(compress-txt)} {(osh2oil)})
            (C {(compress-txt)} {(gold)})
            (C {(log)} {(DQ ('--- test/unit'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/test/unit.wwz))}
                  spids: [1355]
                )
              ]
              spids: [1353]
            )
            (C {(pushd)} {(_tmp/unit)})
            (TimeBlock pipeline:(C {(zip)} {(-r)} {(-q)} {($ VSub_Name '$out')} {(.)}))
            (C {(popd)})
            (C {(log)} {(DQ ('--- test/spec'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/test/spec.wwz))}
                  spids: [1396]
                )
              ]
              spids: [1394]
            )
            (C {(pushd)} {(_tmp/spec)})
            (TimeBlock pipeline:(C {(zip)} {(-r)} {(-q)} {($ VSub_Name '$out')} {(.)}))
            (C {(popd)})
            (C {(log)} {(DQ ('--- test/wild'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/test/wild.wwz))}
                  spids: [1437]
                )
              ]
              spids: [1435]
            )
            (C {(pushd)} {(_tmp/wild/www)})
            (TimeBlock pipeline:(C {(zip)} {(-r)} {(-q)} {($ VSub_Name '$out')} {(.)}))
            (C {(popd)})
            (C {(log)} {(DQ ('--- metrics/line-counts'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/metrics/line-counts.wwz))}
                  spids: [1479]
                )
              ]
              spids: [1477]
            )
            (C {(pushd)} {(_tmp/metrics/line-counts)})
            (TimeBlock pipeline:(C {(zip)} {(-r)} {(-q)} {($ VSub_Name '$out')} {(.)}))
            (C {(popd)})
            (C {(compress-benchmarks)})
            (C {(tree)} {(_release/VERSION)})
          ]
          spids: [1320]
        )
      spids: [1316 1319]
    )
    (FuncDef
      name: compress-benchmarks
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:root)
                  op: Equal
                  rhs: {($ VSub_Name '$PWD') (/_release/VERSION/)}
                  spids: [1531]
                )
              ]
              spids: [1529]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$root')})
            (C {(log)} {(DQ ('--- benchmarks'))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$root') (/benchmarks.wwz))}
                  spids: [1554]
                )
              ]
              spids: [1552]
            )
            (C {(pushd)} {(_tmp)})
            (Pipeline
              children: [
                (C {(find)} 
                  (BracedWordTree
                    parts: [(osh-parser/) (BracedAltPart words:[{(stage1)} {(stage2)} {(index.html)}])]
                  ) (BracedWordTree parts:[(osh-runtime/) (BracedAltPart words:[{(stage1)} {(stage2)} {(index.html)}])]) 
                  (BracedWordTree
                    parts: [
                      (vm-baseline/)
                      (BracedAltPart
                        words: [{(stage1)} {(stage2)} {(index.html)}]
                      )
                    ]
                  ) (BracedWordTree parts:[(oheap/) (BracedAltPart words:[{(stage1)} {(stage2)} {(index.html)}])]) 
                  {(-type)} {(f)}
                )
                (C {(xargs)} {(--verbose)} {(--)} {(zip)} {(-q)} {($ VSub_Name '$out')})
              ]
              negated: F
            )
            (C {(popd)})
          ]
          spids: [1526]
        )
      spids: [1522 1525]
    )
    (FuncDef
      name: metrics-index
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>Line Counts</title>\n') ('    <style>\n') ('      body {\n') ('        margin: 0 auto;\n') ('        width: 40em;\n') 
                        ('      }\n') ('      #home-link {\n') ('        text-align: right;\n') ('      }\n') ('    </style>\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') 
                        ('    <h3>Line Counts</h3>\n') ('    <p>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1664]
                )
              ]
            )
            (C {(find)} {($ VSub_Name '$out')} {(-name)} {(SQ <'*.txt'>)} {(-a)} {(-printf)} 
              {(SQ <'<a href="%P">%P</a> <br/>\\n'>)}
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: {(DQ ('    </p>\n') ('  </body>\n') ('</html>\n'))}
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [1717]
                )
              ]
            )
          ]
          spids: [1655]
        )
      spids: [1651 1654]
    )
    (FuncDef
      name: line-counts
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: {(_tmp/metrics/line-counts)}
                  spids: [1736]
                )
              ]
              spids: [1734]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$out')})
            (SimpleCommand
              words: [{(build/metrics.sh)} {(linecount-pydeps)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/pydeps.txt)}
                  spids: [1756]
                )
              ]
            )
            (SimpleCommand
              words: [{(build/metrics.sh)} {(linecount-nativedeps)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/nativedeps.txt)}
                  spids: [1766]
                )
              ]
            )
            (SimpleCommand
              words: [{(scripts/count.sh)} {(all)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/src.txt)}
                  spids: [1781]
                )
              ]
            )
            (SimpleCommand
              words: [{(scripts/count.sh)} {(parser)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/parser.txt)}
                  spids: [1799]
                )
              ]
            )
            (SimpleCommand
              words: [{(scripts/count.sh)} {(runtime)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/runtime.txt)}
                  spids: [1809]
                )
              ]
            )
            (SimpleCommand
              words: [{(scripts/count.sh)} {(oil-osh-cloc)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/oil-osh-cloc.txt)}
                  spids: [1820]
                )
              ]
            )
            (SimpleCommand
              words: [{(metrics-index)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out') (/index.html)}
                  spids: [1829]
                )
              ]
            )
            (C {(tree)} {($ VSub_Name '$out')})
          ]
          spids: [1731]
        )
      spids: [1727 1730]
    )
    (FuncDef
      name: _copy-path
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:src)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1851]
                )
                (assign_pair
                  lhs: (LhsName name:dest)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [1854]
                )
              ]
              spids: [1849]
            )
            (C {(mkdir)} {(-p)} 
              {
                (CommandSubPart
                  command_list: (CommandList children:[(C {(dirname)} {($ VSub_Name '$dest')})])
                  left_token: <Left_CommandSub '$('>
                  spids: [1862 1866]
                )
              }
            )
            (C {(cp)} {(-v)} {($ VSub_Name '$src')} {($ VSub_Name '$dest')})
          ]
          spids: [1846]
        )
      spids: [1842 1845]
    )
    (FuncDef
      name: copy-web
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(find)} {(web)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-name)} 
                  {(_tmp)} {(-a)} {(-prune)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-o)} 
                  {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-name)} {(SQ <'*.css'>)} {(-o)} {(-name)} {(SQ <'*.js'>)} 
                  {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-a)} {(-printf)} {(SQ <'%p _release/VERSION/%p\\n'>)}
                )
                (C {(xargs)} {(-n)} {(2)} {(--)} {($ VSub_Number '$0')} {(_copy-path)})
              ]
              negated: F
            )
          ]
          spids: [1884]
        )
      spids: [1880 1883]
    )
    (FuncDef
      name: build-tree
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:root)
                  op: Equal
                  rhs: {(_release/VERSION)}
                  spids: [1981]
                )
              ]
              spids: [1979]
            )
            (C {(mkdir)} {(-p)} 
              (BracedWordTree
                parts: [($ VSub_Name '$root') (/) (BracedAltPart words:[{(doc)} {(test)} {(metrics)}])]
              )
            )
            (C {(cp)} {(-v)} {(_build/release-date.txt)} {(oil-version.txt)} {($ VSub_Name '$root')})
            (C {(build/doc.sh)} {(osh-quick-ref)} {(_release/VERSION)})
            (C {(build/doc.sh)} {(install)})
            (C {(build/doc.sh)} {(release-index)} {($ VSub_Name '$root') (/index.html)})
            (C {(copy-web)})
            (C {(tree)} {($ VSub_Name '$root')})
          ]
          spids: [1976]
        )
      spids: [1972 1975]
    )
    (FuncDef
      name: deploy-doc
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:deploy_repo)
                  op: Equal
                  rhs: {(SQ <../oilshell.org__deploy>)}
                  spids: [2089]
                )
              ]
              spids: [2087]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$deploy_repo') (/release))}
                  spids: [2097]
                )
              ]
              spids: [2095]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_dir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name '$release_root_dir') (/) ($ VSub_Name '$OIL_VERSION'))}
                  spids: [2106]
                )
              ]
              spids: [2104]
            )
            (C {(cp)} {(-v)} {(-r)} {(--force)} {(--no-target-directory)} {(_release/VERSION/)} 
              {($ VSub_Name '$release_dir') (/)}
            )
            (C {(html-index)} {($ VSub_Name '$release_root_dir')} {(_tmp/releases.html)})
            (C {(cp)} {(-v)} {(_tmp/releases.html)} {($ VSub_Name '$deploy_repo')})
            (C {(tree)} {(-L)} {(3)} {($ VSub_Name '$release_root_dir')})
            (C {(ls)} {(-l)} {($ VSub_Name '$deploy_repo') (/releases.html)})
          ]
          spids: [2084]
        )
      spids: [2080 2083]
    )
    (FuncDef
      name: deploy-tar
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:download_dir)
                  op: Equal
                  rhs: {(SQ <../oilshell.org__deploy/download/>)}
                  spids: [2194]
                )
              ]
              spids: [2192]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name '$download_dir')})
            (C {(cp)} {(-v)} {(_release/oil-) ($ VSub_Name '$OIL_VERSION') (.tar.) (Lit_Other '*')} 
              {($ VSub_Name '$download_dir')}
            )
            (C {(ls)} {(-l)} {($ VSub_Name '$download_dir')})
          ]
          spids: [2189]
        )
      spids: [2185 2188]
    )
    (FuncDef
      name: _release-files-html
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:version)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [2277]
                )
              ]
              spids: [2275]
            )
            (C {(echo)} {(SQ <'<table class="file-table">'>)})
            (C {(echo)} 
              {
                (SQ 
                  <
'<tr><thead> <td>File</td> <td>Size</td> <td>SHA256 Checksum</td> </thead></tr>'
                  >
                )
              }
            )
            (ForEach
              iter_name: name
              iter_words: [
                (BracedWordTree
                  parts: [(oil-) ($ VSub_Name '$version') (.tar.) (BracedAltPart words:[{(xz)} {(gz)}])]
                )
              ]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:url)
                          op: Equal
                          rhs: {(DQ (download/) ($ VSub_Name '$name'))}
                          spids: [2318]
                        )
                      ]
                      spids: [2316]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path)
                          op: Equal
                          rhs: {(../oilshell.org__deploy/download/) ($ VSub_Name '$name')}
                          spids: [2330]
                        )
                      ]
                      spids: [2328]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:checksum)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(sha256sum)} {($ VSub_Name '$path')})
                                          (C {(awk)} {(SQ <'{print $1}'>)})
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2338 2350]
                              )
                            }
                          spids: [2337]
                        )
                      ]
                      spids: [2335]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:size)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(stat)} {(--format)} {(SQ <'%s'>)} {($ VSub_Name '$path')})
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2356 2366]
                              )
                            }
                          spids: [2355]
                        )
                      ]
                      spids: [2353]
                    )
                    (C {(echo)} 
                      {(SQ <'<tr> <td class="filename"><a href="'>) ($ VSub_Name '$url') (SQ <'">'>) 
                        ($ VSub_Name '$name') (SQ <'</a></td>\n'> <'               <td class="size">'>) ($ VSub_Name '$size') 
                        (SQ <'</td>\n'> <'               <td class="checksum">'>) ($ VSub_Name '$checksum') (SQ <'</td>\n'> <'         </tr>'>)
                      }
                    )
                  ]
                  spids: [2313 2401]
                )
              spids: [2302 2311]
            )
            (C {(echo)} {(SQ <'</table>'>)})
          ]
          spids: [2272]
        )
      spids: [2268 2271]
    )
    (FuncDef
      name: _html-index
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [2477]
                )
              ]
              spids: [2475]
            )
            (ForEach
              iter_name: entry
              iter_words: [{($ VSub_Name '$release_root_dir') (/) (Lit_Other '*')}]
              do_arg_iter: F
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (Pipeline
                                  children: [(C {(test)} {(-d)} {($ VSub_Name '$entry')})]
                                  negated: T
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Continue continue>)]
                          spids: [16777215 2510]
                        )
                      ]
                      spids: [16777215 2516]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:dir)
                          op: Equal
                          rhs: {($ VSub_Name '$entry')}
                          spids: [2521]
                        )
                      ]
                      spids: [2519]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:version)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(head)} {(-n)} {(1)} {($ VSub_Name '$dir') (/oil-version.txt)})
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2529 2538]
                              )
                            }
                          spids: [2528]
                        )
                      ]
                      spids: [2526]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:release_date)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (C {(head)} {(-n)} {(1)} {($ VSub_Name '$dir') (/release-date.txt)})
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [2544 2553]
                              )
                            }
                          spids: [2543]
                        )
                      ]
                      spids: [2541]
                    )
                    (C {(log)} {(DQ ('-- ') ($ VSub_Name '$dir'))})
                    (C {(log)} {(DQ ('Version: ') ($ VSub_Name '$version'))})
                    (C {(log)} {(DQ ('Release Date: ') ($ VSub_Name '$release_date'))})
                    (C {(log)} {(DQ )})
                    (C {(echo)} {(DQ ($ VSub_Name '$release_date') (' ') ($ VSub_Name '$version'))})
                  ]
                  spids: [2496 2597]
                )
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/release-meta.txt)}
                  spids: [2599]
                )
              ]
              spids: [2490 2494]
            )
            (SimpleCommand
              words: [{(sort)} {(-r)} {(_tmp/release-meta.txt)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(_tmp/sorted-releases.txt)}
                  spids: [2615]
                )
              ]
            )
            (While
              cond: [(Sentence child:(C {(read)} {(date)} {(_)} {(version)}) terminator:<Op_Semi ';'>)]
              body: 
                (DoGroup
                  children: [
                    (C {(log)} {(DQ ('Release Date: ') ($ VSub_Name '$date'))})
                    (C {(log)} {(DQ ('Version: ') ($ VSub_Name '$version'))})
                    (C {(echo)} {(SQ <'<a name="'>) ($ VSub_Name '$version') (SQ <'"></a>'>)})
                    (C {(echo)} {(DQ ('<h2>Version ') ($ VSub_Name '$version') ('</h2>'))})
                    (C {(echo)} {(DQ ('<p class=')) (date) (DQ ('>') ($ VSub_Name '$date') ('</p>'))})
                    (C {(echo)} 
                      {(SQ <'<p>                 <a href="release/'>) ($ VSub_Name '$version') 
                        (SQ <'/announcement.html">Release Announcement</a>\n'> 
                          <'              &nbsp; | &nbsp; <a href="release/'>
                        ) ($ VSub_Name '$version') 
                        (SQ <'/doc/INSTALL.html">INSTALL</a>\n'> 
                          <'              &nbsp; | &nbsp; <a href="release/'>
                        ) ($ VSub_Name '$version') (SQ <'/">Docs and Details</a>\n'> <'          </p>'>)
                      }
                    )
                    (C {(_release-files-html)} {($ VSub_Name '$version')})
                  ]
                  spids: [2632 2719]
                )
              redirects: [
                (Redir
                  op_id: Redir_Less
                  fd: 16777215
                  arg_word: {(_tmp/sorted-releases.txt)}
                  spids: [2721]
                )
              ]
            )
          ]
          spids: [2472]
        )
      spids: [2468 2471]
    )
    (FuncDef
      name: _releases-html-header
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('<!DOCTYPE html>\n') ('<html>\n') ('  <head>\n') 
                        ('    <title>Oil Releases</title>\n') ('    <style>\n') ('      /* Make it centered and skinny for readability */\n') ('      body {\n') 
                        ('        margin: 0 auto;\n') ('        width: 60em;\n') ('      }\n') ('      h1 {\n') ('        text-align: center;\n') ('      }\n') 
                        ('      thead {\n') ('        font-weight: bold;\n') ('      }\n') ('      /* Style for checksum, file size, etc. */\n') 
                        ('\n') ('      .file-table {\n') ('        width: 100%;\n') ('      }\n') ('\n') ('      .filename {\n') 
                        ('        font-family: monospace;\n') ('      }\n') ('\n') ('      .size {\n') ('      }\n') ('      .checksum {\n') 
                        ('        font-family: monospace;\n') ('        color: #555;\n') ('      }\n') ('\n') ('      /* Copied from oilshell.org bundle.css */\n') 
                        ('      .date {\n') ('        font-size: medium;\n') ('        color: #555;\n') ('        padding-left: 1em;\n') 
                        ('      }\n') ('      #home-link {\n') ('        text-align: right;\n') ('      }\n') ('    </style>\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') 
                        ('    <h1>Oil Releases</h1>\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: T
                  spids: [2737]
                )
              ]
            )
          ]
          spids: [2732]
        )
      spids: [2728 2731]
    )
    (FuncDef
      name: _html-footer
      body: 
        (BraceGroup
          children: [
            (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: [2810]
                )
              ]
            )
          ]
          spids: [2805]
        )
      spids: [2801 2804]
    )
    (FuncDef
      name: html-index
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:release_root_dir)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [2828]
                )
              ]
              spids: [2826]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Number 2>
                        suffix_op: 
                          (StringUnary
                            op_id: VTest_ColonHyphen
                            arg_word: {(_tmp) (Lit_Slash /) (releases.html)}
                          )
                        spids: [2835 2841]
                      )
                    }
                  spids: [2834]
                )
              ]
              spids: [2832]
            )
            (BraceGroup
              children: [
                (C {(_releases-html-header)})
                (C {(_html-index)} {($ VSub_Name '$release_root_dir')})
                (C {(_html-footer)})
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {($ VSub_Name '$out')}
                  spids: [2860]
                )
              ]
              spids: [2845]
            )
            (C {(ls)} {(-l)} {($ VSub_Name '$out')})
          ]
          spids: [2823]
        )
      spids: [2819 2822]
    )
    (C {(DQ ($ VSub_At '$@'))})
  ]
)