(command.CommandList
  children: [
    (command.ShFunction
      name: get_variable_value
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'FILENAME='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'VARNAME='> ($ Id.VSub_Number '$2')})
            (command.Pipeline
              children: [
                (C {<awk>} 
                  {
                    (DQ <'\n'> <'    BEGIN { start = 0; }\n'> <'    /^'> 
                      ($ Id.VSub_DollarName '$VARNAME') <' =/ { start = 1; }\n'> <'    { if (start) { print '> 
                      (word_part.EscapedLiteral
                        token: <Id.Lit_EscapedChar '\\$'>
                      ) <'0; } }\n'> <'    /'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                      (word_part.EscapedLiteral
                        token: <Id.Lit_EscapedChar '\\\\'>
                      ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'/ { next; }\n'> <'    { start = 0; }\n'> 
                      <'  '>
                    )
                  } {($ Id.VSub_DollarName '$FILENAME')}
                )
                (C {<sed>} {(DQ <'s/^'> ($ Id.VSub_DollarName '$VARNAME') <' =//'>)})
                (C {<sed>} 
                  {
                    (DQ <'s/[ '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <']//g'>)
                  }
                )
                (C {<grep>} {<-v>} 
                  {
                    (DQ <'^'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                      <Id.Lit_Dollar '$'>
                    )
                  }
                )
                (C {<grep>} {<-v>} {(DQ <'^'> <Id.Lit_Dollar '$'>)})
                (command.Simple
                  words: [{<sort>}]
                  more_env: [(env_pair name:LC_ALL val:{<C>} spids:[104])]
                  do_fork: T
                )
                (C {<uniq>})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_header_files
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [(C {<get_variable_value>} {($ Id.VSub_At '$@')}) (C {<grep>} {(SQ <'\\.h$'>)})]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_source_files
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<get_variable_value>} {($ Id.VSub_At '$@')})
                (C {<grep>} {(DQ <cc> <Id.Lit_Dollar '$'>)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_proto_files_blacklisted
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<get_proto_files>} {($ Id.VSub_At '$@')})
                (C {<sed>} {(SQ <'/^google\\/protobuf\\/unittest_enormous_descriptor.proto$/d'>)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_proto_files
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<get_variable_value>} {($ Id.VSub_At '$@')})
                (C {<grep>} {(DQ <pb.cc> <Id.Lit_Dollar '$'>)})
                (C {<sed>} {(DQ <'s/pb.cc/proto/'>)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: sort_files
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: FILE
                  iter_words: [{($ Id.VSub_At '$@')}]
                  do_arg_iter: F
                  body: (command.DoGroup children:[(C {<echo>} {($ Id.VSub_DollarName '$FILE')})])
                )
                (command.Simple
                  words: [{<sort>}]
                  more_env: [(env_pair name:LC_ALL val:{<C>} spids:[242])]
                  do_fork: T
                )
                (C {<uniq>})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MAKEFILE)
          op: assign_op.Equal
          rhs: {<'src/Makefile.am'>}
          spids: [254]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$MAKEFILE'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'Cannot find: '> ($ Id.VSub_DollarName '$MAKEFILE'))})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GZHEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<get_variable_value>} {($ Id.VSub_DollarName '$MAKEFILE')} {<GZHEADERS>})
              )
            }
          spids: [291]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_variable_value>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<nobase_include_HEADERS>}
                  )
              )
            }
          spids: [300]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PUBLIC_HEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<sort_files>} {($ Id.VSub_DollarName '$GZHEADERS')} 
                    {($ Id.VSub_DollarName '$HEADERS')}
                  )
              )
            }
          spids: [309]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOBUF_LITE_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<libprotobuf_lite_la_SOURCES>}
                  )
              )
            }
          spids: [318]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOBUF_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<libprotobuf_la_SOURCES>}
                  )
              )
            }
          spids: [327]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOC_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<libprotoc_la_SOURCES>})
              )
            }
          spids: [336]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_proto_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<protoc_lite_outputs>})
              )
            }
          spids: [345]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<get_proto_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<protoc_outputs>})
              )
            }
          spids: [354]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROTOS_BLACKLISTED)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_proto_files_blacklisted>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<protoc_outputs>}
                  )
              )
            }
          spids: [363]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WKT_PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_variable_value>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<nobase_dist_proto_DATA>}
                  )
              )
            }
          spids: [372]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMMON_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<COMMON_TEST_SOURCES>})
              )
            }
          spids: [381]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMMON_LITE_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<COMMON_LITE_TEST_SOURCES>}
                  )
              )
            }
          spids: [390]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<protobuf_test_SOURCES>})
              )
            }
          spids: [399]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<protobuf_lite_test_SOURCES>}
                  )
              )
            }
          spids: [408]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_ARENA_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} 
                    {<protobuf_lite_arena_test_SOURCES>}
                  )
              )
            }
          spids: [417]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_PLUGIN_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (C {<get_source_files>} {($ Id.VSub_DollarName '$MAKEFILE')} {<test_plugin_SOURCES>})
              )
            }
          spids: [426]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CMAKE_DIR)
          op: assign_op.Equal
          rhs: {<cmake>}
          spids: [446]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:EXTRACT_INCLUDES_BAT)
          op: assign_op.Equal
          rhs: {<'cmake/extract_includes.bat.in'>}
          spids: [449]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-d>} {(DQ ($ Id.VSub_DollarName '$CMAKE_DIR'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'Cannot find: '> ($ Id.VSub_DollarName '$CMAKE_DIR'))})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT'))} 
          {<Id.Lit_RBracket ']'>}
        )
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'Cannot find: '> ($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT'))})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
      ]
    )
    (command.ShFunction
      name: set_cmake_value
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'FILENAME='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'VARNAME='> ($ Id.VSub_Number '$2')})
            (C {<local>} {<Id.Lit_VarLike 'PREFIX='> ($ Id.VSub_Number '$3')})
            (C {<shift>})
            (C {<shift>})
            (C {<shift>})
            (command.Simple
              words: [
                {<awk>}
                {<-v>}
                {<Id.Lit_VarLike 'values='> (DQ ($ Id.VSub_Star '$*'))}
                {<-v>}
                {<Id.Lit_VarLike 'prefix='> (DQ ($ Id.VSub_DollarName '$PREFIX'))}
                {
                  (DQ <'\n'> <'    BEGIN { start = 0; }\n'> <'    /^set'> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'('> ($ Id.VSub_DollarName '$VARNAME') <'/ {\n'> <'      start = 1;\n'> <'      print '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0;\n'> <'      len = split(values, vlist, '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <');\n'> 
                    <'      for (i = 1; i <= len; ++i) {\n'> <'        printf('> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'  %s%s'> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <n> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', prefix, vlist[i]);\n'> <'      }\n'> 
                    <'      next;\n'> <'    }\n'> <'    start && /^'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <')/ {\n'> 
                    <'      start = 0;\n'> <'    }\n'> <'    !start {\n'> <'      print '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0;\n'> <'    }\n'> <'  '>
                  )
                }
                {($ Id.VSub_DollarName '$FILENAME')}
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<'/tmp/'> ($ Id.VSub_Dollar '$$')}
                )
              ]
              do_fork: T
            )
            (C {<cp>} {<'/tmp/'> ($ Id.VSub_Dollar '$$')} {($ Id.VSub_DollarName '$FILENAME')})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CMAKE_PREFIX)
          op: assign_op.Equal
          rhs: 
            {
              (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) 
                <'{protobuf_source_dir}/src/'>
              )
            }
          spids: [625]
        )
      ]
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/libprotobuf-lite.cmake'>} 
      {<libprotobuf_lite_files>} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_LITE_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/libprotobuf.cmake'>} 
      {<libprotobuf_files>} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/libprotoc.cmake'>} 
      {<libprotoc_files>} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOC_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} {<lite_test_protos>} {(DQ )} 
      {($ Id.VSub_DollarName '$LITE_PROTOS')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} {<tests_protos>} {(DQ )} 
      {($ Id.VSub_DollarName '$PROTOS_BLACKLISTED')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} {<common_test_files>} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$COMMON_TEST_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} 
      {<common_lite_test_files>} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$COMMON_LITE_TEST_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} {<tests_files>} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$TEST_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} {<lite_test_files>} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LITE_TEST_SOURCES')}
    )
    (C {<set_cmake_value>} {($ Id.VSub_DollarName '$CMAKE_DIR') <'/tests.cmake'>} 
      {<lite_arena_test_files>} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LITE_ARENA_TEST_SOURCES')}
    )
    (command.Simple
      words: [{<echo>} {(DQ <'mkdir include'>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
        )
      ]
      do_fork: T
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: HEADER
          iter_words: [{($ Id.VSub_DollarName '$PUBLIC_HEADERS')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:HEADER_DIR)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            child: (C {<dirname>} {($ Id.VSub_DollarName '$HEADER')})
                          )
                        }
                      spids: [769]
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: <Id.KW_While while>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} 
                              {(DQ ($ Id.VSub_DollarName '$HEADER_DIR'))} {<Id.Lit_Equals '='>} {(DQ <.>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {<echo>} {($ Id.VSub_DollarName '$HEADER_DIR')})
                            (C {<sed>} 
                              {
                                (DQ <'s/'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                                  <'//'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                                  (word_part.EscapedLiteral
                                    token: <Id.Lit_EscapedChar '\\\\'>
                                  ) <'/g'>
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:HEADER_DIR)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: <Id.Left_DollarParen '$('>
                                    child: (C {<dirname>} {($ Id.VSub_DollarName '$HEADER_DIR')})
                                  )
                                }
                              spids: [817]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
        )
        (C {<sort>})
        (C {<uniq>})
        (command.Simple
          words: [
            {<sed>}
            {
              (DQ <'s/^/mkdir include'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'/'>
              )
            }
          ]
          redirects: [
            (redir
              op: <Id.Redir_DGreat '>>'>
              loc: (redir_loc.Fd fd:1)
              arg: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
            )
          ]
          do_fork: T
        )
      ]
      negated: F
    )
    (command.ForEach
      iter_name: HEADER
      iter_words: [{($ Id.VSub_DollarName '$PUBLIC_HEADERS')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WINPATH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<echo>} {($ Id.VSub_DollarName '$HEADER')})
                              (C {<sed>} {(SQ <'s;/;\\\\;g'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [864]
                )
              ]
            )
            (command.Simple
              words: [
                {<echo>}
                {
                  (DQ <'copy '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) 
                    <'{PROTOBUF_SOURCE_WIN32_PATH}'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <..> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <src> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) ($ Id.VSub_DollarName '$WINPATH') 
                    <' include'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) ($ Id.VSub_DollarName '$WINPATH')
                  )
                }
              ]
              redirects: [
                (redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: set_bazel_value
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'FILENAME='> ($ Id.VSub_Number '$1')})
            (C {<local>} {<Id.Lit_VarLike 'VARNAME='> ($ Id.VSub_Number '$2')})
            (C {<local>} {<Id.Lit_VarLike 'PREFIX='> ($ Id.VSub_Number '$3')})
            (C {<shift>})
            (C {<shift>})
            (C {<shift>})
            (command.Simple
              words: [
                {<awk>}
                {<-v>}
                {<Id.Lit_VarLike 'values='> (DQ ($ Id.VSub_Star '$*'))}
                {<-v>}
                {<Id.Lit_VarLike 'prefix='> (DQ ($ Id.VSub_DollarName '$PREFIX'))}
                {
                  (DQ <'\n'> <'    BEGIN { start = 0; }\n'> <'    /# AUTOGEN'> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'('> ($ Id.VSub_DollarName '$VARNAME') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                    <')/ {\n'> <'      start = 1;\n'> <'      print '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) 
                    <'0;\n'> <'      # replace '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0 with indent.\n'> 
                    <'      sub(/#.*/, '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0)\n'> 
                    <'      len = split(values, vlist, '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <');\n'> <'      for (i = 1; i <= len; ++i) {\n'> <'        printf('> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'%s'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'%s%s'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <','> <Id.Lit_BadBackslash '\\'> <n> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <', '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0, prefix, vlist[i]);\n'> <'      }\n'> <'      next;\n'> <'    }\n'> <'    start && /'> 
                    <Id.Lit_BadBackslash '\\'> <']/ {\n'> <'      start = 0\n'> <'    }\n'> <'    !start {\n'> <'      print '> 
                    (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0;\n'> <'    }\n'> <'  '>
                  )
                }
                {($ Id.VSub_DollarName '$FILENAME')}
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<'/tmp/'> ($ Id.VSub_Dollar '$$')}
                )
              ]
              do_fork: T
            )
            (C {<cp>} {<'/tmp/'> ($ Id.VSub_Dollar '$$')} {($ Id.VSub_DollarName '$FILENAME')})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BAZEL_BUILD)
          op: assign_op.Equal
          rhs: {<'./BUILD'>}
          spids: [1042]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BAZEL_PREFIX)
          op: assign_op.Equal
          rhs: {(DQ <'src/'>)}
          spids: [1045]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BAZEL_BUILD'))} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<protobuf_lite_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_LITE_SOURCES')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<protobuf_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_SOURCES')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<protoc_lib_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOC_SOURCES')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<lite_test_protos>} {(DQ )} 
              {($ Id.VSub_DollarName '$LITE_PROTOS')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<well_known_protos>} {(DQ )} 
              {($ Id.VSub_DollarName '$WKT_PROTOS')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<test_protos>} {(DQ )} 
              {($ Id.VSub_DollarName '$PROTOS')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<common_test_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$COMMON_TEST_SOURCES')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<test_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$TEST_SOURCES')}
            )
            (C {<set_bazel_value>} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {<test_plugin_srcs>} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$TEST_PLUGIN_SOURCES')}
            )
          ]
          spids: [1050 1063]
        )
      ]
      else_action: [(C {<echo>} {(DQ <'Skipped BUILD file update.'>)})]
    )
  ]
)