(command.CommandList
  children: [
    (C {<set>} {<-o>} {<nounset>})
    (C {<set>} {<-o>} {<pipefail>})
    (C {<set>} {<-o>} {<errexit>})
    (C {<readonly>} 
      {<Id.Lit_VarLike 'THIS_DIR='> 
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: 
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<cd>} 
                  {
                    (command_sub
                      left_token: <Id.Left_DollarParen '$('>
                      child: (C {<dirname>} {($ Id.VSub_Number 0)})
                      right: <Id.Eof_RParen _>
                    )
                  }
                )
                (C {<pwd>})
              ]
            )
          right: <Id.Eof_RParen _>
        )
      }
    )
    (C {<source>} {($ Id.VSub_DollarName THIS_DIR) <'/common.sh'>})
    (C {<source>} {($ Id.VSub_DollarName THIS_DIR) <'/../build/common.sh'>})
    (command.ShFunction
      name: md5-manifest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} {<Id.Lit_VarLike 'tree='> ($ Id.VSub_Number 1)})
            (C {<pushd>} {($ Id.VSub_DollarName tree)})
            (command.Pipeline
              children: [
                (C {<find>} {<.>} {<-type>} {<f>})
                (C {<sort>})
                (C {<xargs>} {<stat>} {<--format>} {(SQ <'%s %n'>)})
                (C {<tee>} {<SIZES.txt>})
              ]
              negated: F
              stderr_indices: []
            )
            (command.Pipeline
              children: [
                (C {<find>} {<.>} {<-type>} {<f>})
                (C {<sort>})
                (C {<xargs>} {<md5sum>})
                (C {<tee>} {<MD5.txt>})
              ]
              negated: F
              stderr_indices: []
            )
            (C {<popd>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: _compile-tree
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} {<Id.Lit_VarLike 'src_tree='> ($ Id.VSub_Number 1)})
            (C {<local>} {<Id.Lit_VarLike 'dest_tree='> ($ Id.VSub_Number 2)})
            (C {<local>} {<Id.Lit_VarLike 'version='> ($ Id.VSub_Number 3)})
            (C {<shift>} {<3>})
            (C {<rm>} {<-r>} {<-f>} {($ Id.VSub_DollarName dest_tree)})
            (C {<local>} {<Id.Lit_VarLike 'ext='> <pyc>})
            (command.ForEach
              iter_names: [rel_path]
              iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '@'))}])
              body: 
                (command.DoGroup
                  children: [
                    (C {<echo>} {($ Id.VSub_DollarName rel_path)})
                    (C {<local>} 
                      {<Id.Lit_VarLike 'dest='> (${ Id.VSub_Name dest_tree) <'/'> 
                        (braced_var_sub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name rel_path>
                          var_name: rel_path
                          suffix_op: (suffix_op.Unary op:<Id.VOp1_Percent '%'> arg_word:{<.py>})
                          right: <Id.Right_DollarBrace '}'>
                        ) <.> (${ Id.VSub_Name ext)
                      }
                    )
                    (C {<mkdir>} {<-p>} 
                      {
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: (C {<dirname>} {($ Id.VSub_DollarName dest)})
                          right: <Id.Eof_RParen _>
                        )
                      }
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<test>} {($ Id.VSub_DollarName version)} {<Id.Lit_Equals '='>} 
                                      {<ccompile>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<'misc/ccompile.py'>} 
                              {($ Id.VSub_DollarName src_tree) <'/'> (${ Id.VSub_Name rel_path)} {($ Id.VSub_DollarName dest)}
                            )
                          ]
                          spids: [272 283]
                        )
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<test>} {($ Id.VSub_DollarName version)} {<Id.Lit_Equals '='>} 
                                      {<opy>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {($ Id.VSub_DollarName THIS_DIR) <'/../bin/opyc'>} {<compile>} 
                              {($ Id.VSub_DollarName src_tree) <'/'> (${ Id.VSub_Name rel_path)} {($ Id.VSub_DollarName dest)}
                            )
                          ]
                          spids: [297 308]
                        )
                      ]
                      else_action: [(C {<die>} {(DQ <bad>)})]
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
            (C {<tree>} {($ Id.VSub_DollarName dest_tree)})
            (C {<md5-manifest>} {($ Id.VSub_DollarName dest_tree)})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: compile-manifest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} {<Id.Lit_VarLike 'dest_dir='> ($ Id.VSub_Number 1)})
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: (C {<read>} {<full_src_path>} {<rel_dest_path>})
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (C {<local>} 
                      {<Id.Lit_VarLike 'dest='> ($ Id.VSub_DollarName dest_dir) <'/'> 
                        ($ Id.VSub_DollarName rel_dest_path)
                      }
                    )
                    (C {<mkdir>} {<-p>} 
                      {
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: (C {<dirname>} {($ Id.VSub_DollarName dest)})
                          right: <Id.Eof_RParen _>
                        )
                      }
                    )
                    (C {<log>} {(DQ <'     '> ($ Id.VSub_DollarName full_src_path))})
                    (C {($ Id.VSub_DollarName THIS_DIR) <'/../bin/opyc'>} {<compile>} 
                      {($ Id.VSub_DollarName full_src_path)} {($ Id.VSub_DollarName dest)}
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'rel_py_path='> 
                        (braced_var_sub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name rel_dest_path>
                          var_name: rel_dest_path
                          suffix_op: (suffix_op.Unary op:<Id.VOp1_Percent '%'> arg_word:{<.pyc>})
                          right: <Id.Right_DollarBrace '}'>
                        ) <.py>
                      }
                    )
                    (C {<echo>} {($ Id.VSub_DollarName dest)} {($ Id.VSub_DollarName rel_dest_path)})
                    (C {<echo>} {($ Id.VSub_DollarName full_src_path)} 
                      {($ Id.VSub_DollarName rel_py_path)}
                    )
                  ]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: make-mains
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'dir='> 
                (braced_var_sub
                  left: <Id.Left_DollarBrace '${'>
                  token: <Id.VSub_Number 1>
                  var_name: 1
                  suffix_op: 
                    (suffix_op.Unary
                      op: <Id.VTest_ColonHyphen _>
                      arg_word: {<_tmp> <Id.Lit_Slash '/'> <oil-opy>}
                    )
                  right: <Id.Right_DollarBrace '}'>
                )
              }
            )
            (command.ForEach
              iter_names: [link]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (DQ 
                        (braced_var_sub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name OIL_SYMLINKS>
                          var_name: OIL_SYMLINKS
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (BraceGroup
                      left: <Id.Lit_LBrace '{'>
                      children: [
                        (C {<echo>} {(SQ <'#!/bin/sh'>)})
                        (C {<echo>} {(DQ <'main='> ($ Id.VSub_DollarName link))})
                        (C {<echo>} {(SQ <'exec python $(dirname $0)/oil.pyc $main "$@"'>)})
                      ]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {($ Id.VSub_DollarName dir) <'/bin/'> ($ Id.VSub_DollarName link)}
                        )
                      ]
                      right: <Id.Lit_RBrace '}'>
                    )
                    (C {<chmod>} {<--verbose>} {<Id.Lit_Other '+'> <x>} 
                      {($ Id.VSub_DollarName dir) <'/bin/'> ($ Id.VSub_DollarName link)}
                    )
                  ]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: _fill-oil-tree
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'dir='> 
                (braced_var_sub
                  left: <Id.Left_DollarBrace '${'>
                  token: <Id.VSub_Number 1>
                  var_name: 1
                  suffix_op: 
                    (suffix_op.Unary
                      op: <Id.VTest_ColonHyphen _>
                      arg_word: {<_tmp> <Id.Lit_Slash '/'> <repo-with-opy>}
                    )
                  right: <Id.Right_DollarBrace '}'>
                )
              }
            )
            (C {<cp>} {<-v>} 
              (word.BracedTree
                parts: [<'../osh/'> (word_part.BracedTuple words:[{<osh>} {<types>}]) <.asdl>]
              ) {($ Id.VSub_DollarName dir) <'/osh'>}
            )
            (C {<cp>} {<-v>} {<'../core/runtime.asdl'>} {($ Id.VSub_DollarName dir) <'/core'>})
            (C {<cp>} {<-v>} {<'../asdl/arith.asdl'>} {($ Id.VSub_DollarName dir) <'/asdl'>})
            (C {<ln>} {<-v>} {<-s>} {<-f>} 
              (word.BracedTree
                parts: [
                  ($ Id.VSub_DollarName PWD)
                  <'/../'>
                  (word_part.BracedTuple words:[{<libc>} {<fastlex>}])
                  <.so>
                ]
              ) {($ Id.VSub_DollarName dir)}
            )
            (C {<ln>} {<-v>} {<-s>} {<-f>} {($ Id.VSub_DollarName PWD) <'/../oil-version.txt'>} 
              {($ Id.VSub_DollarName dir)}
            )
            (C {<ln>} {<-v>} {<-s>} {<-f>} {<--no-target-directory>} 
              {($ Id.VSub_DollarName PWD) <'/../_build'>} {($ Id.VSub_DollarName dir) <'/_build'>}
            )
            (C {<mkdir>} {<-v>} {<-p>} {($ Id.VSub_DollarName dir) <'/_tmp'>})
            (C {<local>} {<Id.Lit_VarLike 'stub='> ($ Id.VSub_DollarName dir) <'/bin/osh-byterun'>})
            (command.Simple
              words: [{<cat>}]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName stub)}
                )
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <EOF>)}
                      here_end_span_id: 735
                      stdin_parts: [
                        <'#!/bin/bash\n'>
                        <'readonly THIS_DIR=$(cd $(dirname $0) && pwd)\n'>
                        <'exec python $THIS_DIR/opy_.pyc opyc run $THIS_DIR/oil.pyc osh "$@"\n'>
                      ]
                    )
                )
              ]
              more_env: []
              do_fork: T
            )
            (C {<chmod>} {<Id.Lit_Other '+'> <x>} {($ Id.VSub_DollarName stub)})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: oil-repo
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<local>} 
              {<Id.Lit_VarLike 'repo_root='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [(C {<cd>} {($ Id.VSub_DollarName THIS_DIR) <'/..'>}) (C {<pwd>})]
                    )
                  right: <Id.Eof_RParen _>
                )
              }
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'files='> 
                (sh_array_literal
                  left: <Id.Op_LParen _>
                  words: [
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<oil-python-sources>} {($ Id.VSub_DollarName repo_root)})
                        right: <Id.Eof_RParen _>
                      )
                    }
                  ]
                )
              }
            )
            (C {<_compile-tree>} {($ Id.VSub_DollarName repo_root)} {<'_tmp/repo-with-cpython/'>} 
              {<ccompile>} 
              {
                (DQ 
                  (braced_var_sub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name files>
                    var_name: files
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                    right: <Id.Right_DollarBrace '}'>
                  )
                )
              }
            )
            (C {<_compile-tree>} {($ Id.VSub_DollarName repo_root)} {<'_tmp/repo-with-opy/'>} {<opy>} 
              {
                (DQ 
                  (braced_var_sub
                    left: <Id.Left_DollarBrace '${'>
                    token: <Id.VSub_Name files>
                    var_name: files
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                    right: <Id.Right_DollarBrace '}'>
                  )
                )
              }
            )
            (C {<_fill-oil-tree>} {<'_tmp/repo-with-cpython'>})
            (C {<_fill-oil-tree>} {<'_tmp/repo-with-opy'>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: _oil-bin-manifest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (BraceGroup
                  left: <Id.Lit_LBrace '{'>
                  children: [
                    (C {<'build/actions.sh'>} {<runpy-py-to-compile>})
                    (C {<'build/actions.sh'>} {<py-to-compile>} {(SQ <.>)} {(SQ <bin.oil>)})
                  ]
                  redirects: []
                  right: <Id.Lit_RBrace '}'>
                )
                (C {<sort>})
                (C {<uniq>})
              ]
              negated: F
              stderr_indices: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: oil-bin
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<pushd>} {($ Id.VSub_DollarName THIS_DIR) <'/..'>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
              more_env: []
              do_fork: T
            )
            (command.Pipeline
              children: [(C {<_oil-bin-manifest>}) (C {<compile-manifest>} {<'_tmp/oil-with-opy'>})]
              negated: F
              stderr_indices: []
            )
            (command.Simple
              words: [{<popd>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
              more_env: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: _opy-bin-manifest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [(C {<'build/actions.sh'>} {<py-to-compile>} {(SQ <.>)} {(SQ <bin.opy_>)})]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: opy-bin
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<pushd>} {<..>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
              more_env: []
              do_fork: T
            )
            (command.Pipeline
              children: [(C {<_opy-bin-manifest>}) (C {<compile-manifest>} {<'_tmp/opy-with-opy'>})]
              negated: F
              stderr_indices: []
            )
            (command.Simple
              words: [{<popd>}]
              redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})]
              more_env: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (C {(DQ ($ Id.VSub_At '@'))})
  ]
)