(command.CommandList
  children: [
    (C {<Id.KW_Set set>} {<-euo>} {<pipefail>})
    (C {<shopt>} {<-s>} {<extglob>})
    (C {<rm>} {<-rf>} {<bundle>})
    (command.ShFunction
      name: fail
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{<echo>} {(DQ <'make-bundle.sh: FAILED at line '> ($ Id.VSub_Number '$1'))}]
              redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
            )
            (C {<rm>} {<-rf>} {<bundle>})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
    )
    (C {<trap>} {(SQ <'fail ${LINENO}'>)} {<ERR>})
    (command.ShFunction
      name: copyDep
      body: 
        (command.BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'FILE='> ($ Id.VSub_Number '$1')})
            (C {<local>} 
              {<Id.Lit_VarLike 'DST='> <bundle> 
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name FILE>
                    suffix_op: 
                      (suffix_op.PatSub
                        pat: 
                          {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>) <usr> 
                            (word_part.EscapedLiteral
                              token: <Id.Lit_EscapedChar '\\/'>
                            ) <local>
                          }
                        replace: {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>) <usr>}
                        replace_mode: Id.Lit_Pound
                      )
                  )
                )
              }
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-e>} {(DQ ($ Id.VSub_DollarName '$DST'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<Id.Lit_Other ':'>})]
                  spids: [152 165]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.DBracket
                          expr: 
                            (bool_expr.Binary
                              op_id: Id.BoolBinary_GlobDEqual
                              left: {(DQ ($ Id.VSub_DollarName '$FILE'))}
                              right: {</etc/> <Id.Lit_Other '*'>}
                            )
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$FILE'))} 
                                  {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          action: [
                            (command.Simple
                              words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$FILE'))}]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_DGreat '>>'>
                                  fd: -1
                                  arg_word: {<tmp/host.list>}
                                )
                              ]
                            )
                          ]
                          spids: [198 211]
                        )
                      ]
                    )
                  ]
                  spids: [175 191]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-h>} {(DQ ($ Id.VSub_DollarName '$FILE'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<mkdir>} {<-p>} 
                      {
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$DST'))})]
                            )
                        )
                      }
                    )
                    (C {<local>} 
                      {<Id.Lit_VarLike 'LINK='> 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [(C {<readlink>} {<-f>} {(DQ ($ Id.VSub_DollarName '$FILE'))})]
                            )
                        )
                      }
                    )
                    (C {<ln>} {<-sf>} 
                      {
                        (DQ 
                          (braced_var_sub
                            token: <Id.VSub_Name LINK>
                            suffix_op: 
                              (suffix_op.PatSub
                                pat: 
                                  {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>) <usr> 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\/'>
                                    ) <local>
                                  }
                                replace: 
                                  {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\/'>) <usr>}
                                replace_mode: Id.Lit_Pound
                              )
                          )
                        )
                      } {(DQ ($ Id.VSub_DollarName '$DST'))}
                    )
                    (C {<copyDep>} {(DQ ($ Id.VSub_DollarName '$LINK'))})
                  ]
                  spids: [228 241]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-d>} {(DQ ($ Id.VSub_DollarName '$FILE'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [(C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$DST'))})]
                  spids: [326 339]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$FILE'))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<mkdir>} {<-p>} 
                      {
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$DST'))})]
                            )
                        )
                      }
                    )
                    (C {<cp>} {(DQ ($ Id.VSub_DollarName '$FILE'))} {(DQ ($ Id.VSub_DollarName '$DST'))})
                  ]
                  spids: [355 368]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: copyDeps
      body: 
        (command.BraceGroup
          children: [
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: [(command.Sentence child:(C {<read>} {<FILE>}) terminator:<Id.Op_Semi _>)]
              body: 
                (command.DoGroup
                  children: [(C {<copyDep>} {(DQ ($ Id.VSub_DollarName '$FILE'))})]
                )
            )
          ]
        )
    )
    (command.ForEach
      iter_name: CMD
      iter_words: [{<zip>} {<unzip>} {<xz>} {<gpg>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              words: [{<which>} {(DQ ($ Id.VSub_DollarName '$CMD'))}]
                              redirects: [
                                (redir.Redir
                                  op: <Id.Redir_Great '>'>
                                  fd: -1
                                  arg_word: {</dev/null>}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{<echo>} {(DQ <'Please install '> ($ Id.VSub_DollarName '$CMD'))}]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})]
                    )
                    (C {<fail>} {(${ Id.VSub_Name LINENO)})
                  ]
                  spids: [459 474]
                )
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:METEOR_DEV_BUNDLE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                command_list: (command.CommandList children:[(C {<./find-meteor-dev-bundle.sh>})])
              )
            }
          spids: [500]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:NODE_BUILD_ROOT)
          op: assign_op.Equal
          rhs: {</var/tmp/sandstorm-node-build-dir>}
          spids: [530]
        )
      ]
    )
    (C {<echo>} {(DQ <'Building node out-of-tree'>)})
    (C {<rm>} {<-rf>} {(DQ ($ Id.VSub_DollarName '$NODE_BUILD_ROOT'))})
    (C {<mkdir>} {<-p>} {(DQ ($ Id.VSub_DollarName '$NODE_BUILD_ROOT'))})
    (C {<cp>} {<-a>} {<deps/node>} {(DQ ($ Id.VSub_DollarName '$NODE_BUILD_ROOT'))})
    (C {<pushd>} {(DQ ($ Id.VSub_DollarName '$NODE_BUILD_ROOT') </node>)})
    (C {<./configure>} {<--partly-static>})
    (C {<make>} 
      {<-j> 
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          command_list: (command.CommandList children:[(C {<nproc>})])
        )
      }
    )
    (C {<popd>})
    (C {<mkdir>} {<-p>} {<deps/node/out>})
    (C {<rm>} {<-rf>} {<deps/node/out/> <Id.Lit_Star '*'>})
    (C {<mv>} {(DQ ($ Id.VSub_DollarName '$NODE_BUILD_ROOT') </node/out>) </> <Id.Lit_Star '*'>} 
      {<deps/node/out/>}
    )
    (C {<cp>} {<-r>} {<shell-build/bundle>} {<bundle>})
    (C {<rm>} {<-f>} {<bundle/README>})
    (C {<cp>} {<meteor-bundle-main.js>} {<bundle/sandstorm-main.js>})
    (command.Subshell
      command_list: 
        (command.CommandList
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {<cd>} {<bundle/programs/server>})
                (command.Simple
                  words: [{(DQ ($ Id.VSub_DollarName '$METEOR_DEV_BUNDLE') </bin/npm>)} {<install>}]
                  more_env: [
                    (env_pair
                      name: PATH
                      val: 
                        {($ Id.VSub_DollarName '$PWD') </deps/node/out/Release> <Id.Lit_Other ':'> 
                          ($ Id.VSub_DollarName '$METEOR_DEV_BUNDLE') </lib/node_modules/.bin> <Id.Lit_Other ':'> ($ Id.VSub_DollarName '$METEOR_DEV_BUNDLE') </bin> 
                          <Id.Lit_Other ':'> ($ Id.VSub_DollarName '$PATH')
                        }
                      spids: [670]
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {<mkdir>} {<-p>} {<bundle/bin>})
    (C {<cp>} {<bin/sandstorm-http-bridge>} {<bundle/bin/sandstorm-http-bridge>})
    (C {<cp>} {<bin/sandstorm>} {<bundle/sandstorm>})
    (C {<cp>} {<deps/node/out/Release/node>} {<bundle/bin>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD_BUNDLE_BASE)
          op: assign_op.Equal
          rhs: {<sandstorm-171>}
          spids: [735]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD_BUNDLE_FILENAME)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$OLD_BUNDLE_BASE') <.tar.xz>}
          spids: [738]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD_BUNDLE_PATH)
          op: assign_op.Equal
          rhs: {<hack/> ($ Id.VSub_DollarName '$OLD_BUNDLE_FILENAME')}
          spids: [742]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD_BUNDLE_SHA256)
          op: assign_op.Equal
          rhs: {<ebffd643dffeba349f139bee34e4ce33fd9b1298fafc1d6a31eb35a191059a99>}
          spids: [746]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OLD_MONGO_FILES)
          op: assign_op.Equal
          rhs: 
            {
              (DQ ($ Id.VSub_DollarName '$OLD_BUNDLE_BASE') <'/bin/mongo '> 
                ($ Id.VSub_DollarName '$OLD_BUNDLE_BASE') </bin/mongod>
              )
            }
          spids: [749]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} 
                  {(DQ ($ Id.VSub_DollarName '$OLD_BUNDLE_PATH'))} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<echo>} 
              {
                (DQ <'Fetching '> ($ Id.VSub_DollarName '$OLD_BUNDLE_FILENAME') 
                  <' to extract a mongo 2.6...'>
                )
              }
            )
            (C {<curl>} {<--output>} {(DQ ($ Id.VSub_DollarName '$OLD_BUNDLE_PATH'))} 
              {<https> <Id.Lit_Other ':'> <//dl.sandstorm.io/> 
                ($ Id.VSub_DollarName '$OLD_BUNDLE_FILENAME')
              }
            )
          ]
          spids: [757 773]
        )
      ]
    )
    (command.Simple
      words: [{<sha256sum>} {<--check>}]
      redirects: [
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          here_begin: {<EOF>}
          here_end_span_id: 816
          stdin_parts: [
            ($ Id.VSub_DollarName '$OLD_BUNDLE_SHA256')
            <'  '>
            ($ Id.VSub_DollarName '$OLD_BUNDLE_PATH')
            <'\n'>
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rc)
          op: assign_op.Equal
          rhs: {($ Id.VSub_QMark '$?')}
          spids: [820]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$rc')} {<-ne>} {<0>} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (C {<echo>} {(DQ <'Old bundle did not match expected checksum.  Aborting.'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [823 836]
        )
      ]
    )
    (C {<tar>} {<xf>} {($ Id.VSub_DollarName '$OLD_BUNDLE_PATH')} 
      {<--transform> <Id.Lit_Equals '='> <s/> <Id.Lit_Other '^'> (${ Id.VSub_Name OLD_BUNDLE_BASE) 
        </bundle/>
      } {($ Id.VSub_DollarName '$OLD_MONGO_FILES')}
    )
    (C {<cp>} 
      {
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          command_list: 
            (command.CommandList
              children: [(C {<which>} {<zip>} {<unzip>} {<xz>} {<gpg>})]
            )
        )
      } {<bundle/bin>}
    )
    (C {<ln>} {<-s>} {<../sandstorm>} {<bundle/bin/spk>})
    (C {<chmod>} {<u> <Id.Lit_Other '+'> <w>} {<bundle/bin/> <Id.Lit_Star '*'>})
    (C {<mkdir>} {<-p>} 
      (word.BracedTree
        parts: [<bundle/usr/include/> (word_part.BracedTuple words:[{<capnp>} {<sandstorm>}])]
      )
    )
    (C {<cp>} 
      {<src/capnp/> 
        (word_part.ExtGlob
          op: <Id.ExtGlob_Bang '!('>
          arms: [{<Id.Lit_Other '*'> <test> <Id.Lit_Other '*'>}]
        ) <.capnp>
      } {<bundle/usr/include/capnp>}
    )
    (C {<cp>} {<src/sandstorm/> <Id.Lit_Star '*'> <.capnp>} {<bundle/usr/include/sandstorm>})
    (C {<cp>} {<-r>} {<node_modules>} {<bundle>})
    (command.Pipeline
      children: [
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (C {<ldd>} {<bundle/bin/> <Id.Lit_Star '*'>} 
                      {
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          command_list: 
                            (command.CommandList
                              children: [(C {<find>} {<bundle>} {<-name>} {(SQ <'*.node'>)})]
                            )
                        )
                      }
                    )
                    (C {<true>})
                  ]
                )
              ]
            )
        )
        (C {<grep>} {<-o>} {(SQ <'[[:space:]]/[^ ]*'>)})
        (C {<copyDeps>})
      ]
      negated: F
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<tmp/dnstest.c>})
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          here_begin: {(SQ <__EOF__>)}
          here_end_span_id: 1044
          stdin_parts: [
            <'#include <sys/types.h>\n'>
            <'#include <sys/socket.h>\n'>
            <'#include <netdb.h>\n'>
            <'#include <stdlib.h>\n'>
            <'\n'>
            <'int main() {\n'>
            <'  struct addrinfo* result;\n'>
            <'  getaddrinfo("example.com", "http", NULL, &result);\n'>
            <'  return 0;\n'>
            <'}\n'>
          ]
        )
      ]
    )
    (C {<gcc>} {<tmp/dnstest.c>} {<-o>} {<tmp/dnstest>})
    (command.Pipeline
      children: [
        (command.Simple
          words: [{<strace>} {<tmp/dnstest>}]
          redirects: [(redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})]
        )
        (C {<grep>} {<-o>} {(SQ <'"/[^"]*"'>)})
        (C {<tr>} {<-d>} {(SQ <'"'>)})
        (C {<copyDeps>})
      ]
      negated: F
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir.Redir op:<Id.Redir_DGreat '>>'> fd:-1 arg_word:{<tmp/host.list>})
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          here_begin: {(SQ <__EOF__>)}
          here_end_span_id: 1122
          stdin_parts: [
            <'/etc/gai.conf\n'>
            <'/etc/host.conf\n'>
            <'/etc/hosts\n'>
            <'/etc/nsswitch.conf\n'>
            <'/etc/resolvconf\n'>
            <'/etc/resolv.conf\n'>
            <'/etc/services\n'>
            <'/run/resolvconf\n'>
            <'/run/systemd/resolve/resolv.conf\n'>
          ]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<cat>} {<tmp/host.list>})
        (C {<grep>} {<-v>} {(SQ <'/ld[.]so[.]'>)})
        (C {<sort>})
        (command.Simple
          words: [{<uniq>}]
          redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<bundle/host.list>})]
        )
      ]
      negated: F
    )
    (C {<mkdir>} {<-p>} 
      (word.BracedTree
        parts: [
          <bundle/>
          (word_part.BracedTuple
            words: [
              {<dev>}
              {<Id.KW_Proc proc>}
              {<tmp>}
              {<etc>}
              {<etc.host>}
              {<run>}
              {<run.host>}
              {<Id.KW_Var var>}
            ]
          )
        ]
      )
    )
    (C {<touch>} 
      (word.BracedTree
        parts: [
          <bundle/dev/>
          (word_part.BracedTuple words:[{<null>} {<zero>} {<random>} {<urandom>} {<fuse>}])
        ]
      )
    )
    (C {<mkdir>} {<-p>} {<bundle/usr/lib/locale>})
    (C {<localedef>} {<--no-archive>} {<--inputfile> <Id.Lit_Equals '='> <./localedata-C>} 
      {<--charmap> <Id.Lit_Equals '='> <UTF-8>} {<bundle/usr/lib/locale/C.UTF-8>}
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<Id.Lit_LBracket '['>} {<-e>} {<.git>} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<git>} {<rev-parse>} {<HEAD>}]
              redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<bundle/git-revision>})]
            )
          ]
          spids: [1230 1241]
        )
      ]
      else_action: [
        (command.Simple
          words: [{<echo>} {(DQ <unknown>)}]
          redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<bundle/git-revision>})]
        )
      ]
    )
    (command.Simple
      words: [
        {<echo>}
        {
          (DQ ($ Id.VSub_DollarName '$USER') <'@'> ($ Id.VSub_DollarName '$HOSTNAME') <' '> 
            (command_sub
              left_token: <Id.Left_DollarParen '$('>
              command_list: (command.CommandList children:[(C {<date>})])
            )
          )
        }
      ]
      redirects: [(redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<bundle/buildstamp>})]
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir.Redir op:<Id.Redir_Great '>'> fd:-1 arg_word:{<bundle/README.md>})
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          here_begin: {(SQ <__EOF__>)}
          here_end_span_id: 1316
          stdin_parts: [
            <'# Sandstorm Bundle\n'>
            <'\n'>
            <'See: http://sandstorm.io\n'>
            <'\n'>
            <'This is a self-contained, batteries-included Sandstorm server. It should\n'>
            <'work on any Linux kernel whose version is 3.13 or newer. The rest of your\n'>
            <'filesystem is not touched and may as well be empty; everything will run in\n'>
            <'a chroot.\n'>
            <'\n'>
            <'This bundle is intended to be installed using the Sandstorm installer or\n'>
            <'updater. To install Sandstorm, please run:\n'>
            <'\n'>
            <'    curl https://install.sandstorm.io | bash\n'>
            <'\n'>
            <'If you have already installed Sandstorm, you can update your installation to\n'>
            <'this version by running:\n'>
            <'\n'>
            <'    service sandstorm update <filename>.tar.xz\n'>
          ]
        )
      ]
    )
  ]
)