(CommandList
  children: [
    (C {(set)} {(-o)} {(errexit)})
    (C {(set)} {(-o)} {(nounset)})
    (C {(set)} {(-o)} {(pipefail)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_ROOT)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [64 72]
              ) (/../..)
            }
          spids: [63]
        )
      ]
      spids: [63]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/hack/lib/init.sh))})
    (C {(kube) (Lit_Other ':') (Lit_Other ':') (golang) (Lit_Other ':') (Lit_Other ':') (setup_env)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_CACHE_MUTATION_DETECTOR)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_CACHE_MUTATION_DETECTOR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                  spids: [99 103]
                )
              )
            }
          spids: [97]
        )
      ]
      spids: [97]
    )
    (C {(export)} {(KUBE_CACHE_MUTATION_DETECTOR)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_PANIC_WATCH_DECODE_ERROR)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_PANIC_WATCH_DECODE_ERROR>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(true)})
                  spids: [116 120]
                )
              )
            }
          spids: [114]
        )
      ]
      spids: [114]
    )
    (C {(export)} {(KUBE_PANIC_WATCH_DECODE_ERROR)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(which)} {(shasum)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [137]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[140])
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:SHA1SUM)
                  op: Equal
                  rhs: {(DQ ('shasum -a1'))}
                  spids: [147]
                )
              ]
              spids: [147]
            )
          ]
          spids: [16777215 144]
        )
        (if_arm
          cond: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(which)} {(sha1sum)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [158]
                    )
                    (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[161])
                  ]
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:SHA1SUM)
                  op: Equal
                  rhs: {(DQ (sha1sum))}
                  spids: [168]
                )
              ]
              spids: [168]
            )
          ]
          spids: [152 165]
        )
      ]
      else_action: [
        (SimpleCommand
          words: [{(echo)} {(DQ ('Failed to find shasum or sha1sum utility.'))}]
          redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[182])]
        )
        (C {(exit)} {(1)})
      ]
      spids: [173 190]
    )
    (FuncDef
      name: 'kube::test::find_dirs'
      body: 
        (BraceGroup
          children: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(cd)} {(${ VSub_Name KUBE_ROOT)})
                    (Pipeline
                      children: [
                        (C {(find)} {(-L)} {(.)} {(-not)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-path)} {(SQ <'./_artifacts/*'>)} {(-o)} {(-path)} 
                          {(SQ <'./bazel-*/*'>)} {(-o)} {(-path)} {(SQ <'./_output/*'>)} {(-o)} {(-path)} {(SQ <'./_gopath/*'>)} {(-o)} {(-path)} 
                          {(SQ <'./cmd/kubeadm/test/*'>)} {(-o)} {(-path)} {(SQ <'./contrib/podex/*'>)} {(-o)} {(-path)} {(SQ <'./output/*'>)} {(-o)} {(-path)} 
                          {(SQ <'./release/*'>)} {(-o)} {(-path)} {(SQ <'./target/*'>)} {(-o)} {(-path)} {(SQ <'./test/e2e/*'>)} {(-o)} {(-path)} 
                          {(SQ <'./test/e2e_node/*'>)} {(-o)} {(-path)} {(SQ <'./test/integration/*'>)} {(-o)} {(-path)} {(SQ <'./third_party/*'>)} {(-o)} {(-path)} 
                          {(SQ <'./staging/*'>)} {(-o)} {(-path)} {(SQ <'./vendor/*'>)} {(-o)} {(-path)} {(SQ <'./federation/test/*'>)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-prune)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} 
                          {
                            (DQ ('s|^') (Lit_Other '\\') ('./|') (${ VSub_Name KUBE_GO_PACKAGE) ('/|'))
                          }
                        )
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[430])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(-L)} {(.)} {(-path)} {(SQ <./_output>)} {(-prune)} {(-o)} {(-path)} 
                          {(SQ <'./vendor/k8s.io/client-go/*'>)} {(-o)} {(-path)} {(SQ <'./vendor/k8s.io/apiserver/*'>)} {(-o)} {(-path)} {(SQ <'./test/e2e_node/system/*'>)} 
                          {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} 
                          {
                            (DQ ('s|^') (Lit_Other '\\') ('./|') (${ VSub_Name KUBE_GO_PACKAGE) ('/|'))
                          }
                        )
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[519])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/client-go)} {(-name)} {(SQ <'*_test.go'>)} 
                          {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[570])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apiserver)} {(-name)} {(SQ <'*_test.go'>)} 
                          {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[621])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apimachinery)} {(-name)} {(SQ <'*_test.go'>)} 
                          {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[672])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/kube-aggregator)} {(-name)} 
                          {(SQ <'*_test.go'>)} {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[719])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/apiextensions-apiserver)} {(-not)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-path)} {(SQ <'*/test/integration/*'>)} 
                          {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-prune)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-name)} {(SQ <'*_test.go'>)} {(-name)} 
                          {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[792])]
                        )
                      ]
                      negated: False
                    )
                    (Pipeline
                      children: [
                        (C {(find)} {(./staging/src/k8s.io/sample-apiserver)} {(-name)} 
                          {(SQ <'*_test.go'>)} {(-name)} {(SQ <'*_test.go'>)} {(-print0)}
                        )
                        (C {(xargs)} {(-0n1)} {(dirname)})
                        (C {(sed)} {(SQ <'s|^\\./staging/src/|./vendor/|'>)})
                        (SimpleCommand
                          words: [{(sort)} {(-u)}]
                          more_env: [(env_pair name:LC_ALL val:{(C)} spids:[839])]
                        )
                      ]
                      negated: False
                    )
                  ]
                )
              spids: [206 847]
            )
          ]
          spids: [203]
        )
      spids: [193 202]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TIMEOUT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_TIMEOUT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{('-timeout 120s')})
                spids: [853 857]
              )
            }
          spids: [852]
        )
      ]
      spids: [852]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVER)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVER>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(n)})
                spids: [860 864]
              )
            }
          spids: [859]
        )
      ]
      spids: [859]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVERMODE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVERMODE>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(atomic)})
                spids: [870 874]
              )
            }
          spids: [869]
        )
      ]
      spids: [869]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_COVERPROCS)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_COVERPROCS>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(4)})
                spids: [883 887]
              )
            }
          spids: [882]
        )
      ]
      spids: [882]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_RACE)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_RACE>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [890 893]
              )
            }
          spids: [889]
        )
      ]
      spids: [889]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_GOVERALLS_BIN)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_GOVERALLS_BIN>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [902 905]
              )
            }
          spids: [901]
        )
      ]
      spids: [901]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ALL_VERSIONS_CSV)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (Sentence
                        child: 
                          (Assignment
                            keyword: Assign_None
                            pairs: [
                              (assign_pair
                                lhs: (LhsName name:IFS)
                                op: Equal
                                rhs: {(SQ <','>)}
                                spids: [924]
                              )
                            ]
                            spids: [924]
                          )
                        terminator: <Op_Semi ';'>
                      )
                      (Sentence
                        child: 
                          (C {(echo)} 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name KUBE_AVAILABLE_GROUP_VERSIONS>
                                  bracket_op: (WholeArray op_id:Arith_Star)
                                  suffix_op: 
                                    (PatSub
                                      pat: {(' ')}
                                      replace: {(',')}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [932 942]
                                )
                              )
                            }
                          )
                        terminator: <Op_Semi ';'>
                      )
                      (Assignment
                        keyword: Assign_None
                        pairs: [
                          (assign_pair
                            lhs: (LhsName name:IFS)
                            op: Equal
                            rhs: {(Lit_Other '$')}
                            spids: [945]
                          )
                        ]
                        spids: [945]
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [923 947]
              ) (Lit_Comma ',') (federation/v1beta1)
            }
          spids: [922]
        )
      ]
      spids: [922]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_TEST_API_VERSIONS)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_TEST_API_VERSIONS>
                  suffix_op: 
                    (StringUnary
                      op_id: VTest_ColonHyphen
                      arg_word: {(${ VSub_Name ALL_VERSIONS_CSV)}
                    )
                  spids: [953 959]
                )
              )
            }
          spids: [951]
        )
      ]
      spids: [951]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_JUNIT_REPORT_DIR)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_JUNIT_REPORT_DIR>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                spids: [969 972]
              )
            }
          spids: [968]
        )
      ]
      spids: [968]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_KEEP_VERBOSE_TEST_OUTPUT)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name KUBE_KEEP_VERBOSE_TEST_OUTPUT>
                suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(n)})
                spids: [981 985]
              )
            }
          spids: [980]
        )
      ]
      spids: [980]
    )
    (FuncDef
      name: 'kube::test::usage'
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [
                {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                  (usage_from_stdin)
                }
              ]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: 16777215
                  body: 
                    {
                      (DQ ('usage: ') ($ VSub_Number '$0') (' [OPTIONS] [TARGETS]\n') ('\n') 
                        ('OPTIONS:\n') ('  -p <number>   : number of parallel workers, must be >= 1\n')
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [1009]
                )
              ]
            )
          ]
          spids: [998]
        )
      spids: [988 997]
    )
    (FuncDef
      name: isnum
      body: 
        (BraceGroup
          children: [
            (DBracket
              expr: 
                (BoolBinary
                  op_id: BoolBinary_EqualTilde
                  left: {(DQ ($ VSub_Number '$1'))}
                  right: 
                    {(Lit_Other '^') (Lit_Other '[') (0-9) (Lit_Other ']') (Lit_Other '+') 
                      (Lit_Other '$')
                    }
                )
            )
          ]
          spids: [1026]
        )
      spids: [1022 1025]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:PARALLEL)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name PARALLEL>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(1)})
                  spids: [1051 1055]
                )
              )
            }
          spids: [1049]
        )
      ]
      spids: [1049]
    )
    (While
      cond: [(Sentence child:(C {(getopts)} {(DQ ('hp:i:'))} {(opt)}) terminator:<Op_Semi ';'>)]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {($ VSub_Name '$opt')}
              arms: [
                (case_arm
                  pat_list: [{(h)}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      }
                    )
                    (C {(exit)} {(0)})
                  ]
                  spids: [1080 1081 1098 16777215]
                )
                (case_arm
                  pat_list: [{(p)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:PARALLEL)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$OPTARG'))}
                          spids: [1105]
                        )
                      ]
                      spids: [1105]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (AndOr
                                  children: [
                                    (Pipeline
                                      children: [(C {(isnum)} {(DQ (${ VSub_Name PARALLEL))})]
                                      negated: True
                                    )
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_le
                                          left: {(DQ (${ VSub_Name PARALLEL))}
                                          right: {(0)}
                                        )
                                    )
                                  ]
                                  op_id: Op_DPipe
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C 
                              {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') 
                                (Lit_Other ':') (usage)
                              } {(DQ ("'") ($ VSub_Number '$0') ("': argument to -p must be numeric and greater than 0"))}
                            )
                            (C 
                              {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') 
                                (Lit_Other ':') (usage)
                              }
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [16777215 1140]
                        )
                      ]
                      spids: [16777215 1172]
                    )
                  ]
                  spids: [1101 1102 1175 16777215]
                )
                (case_arm
                  pat_list: [{(i)}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      } {(DQ ("'") ($ VSub_Number '$0') ("': use GOFLAGS='-count <num-iterations>'"))}
                    )
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1178 1179 1211 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '?')}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1214 1215 1232 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other ':')}]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      } {(DQ ('Option -') ($ VSub_Name '$OPTARG') (' <value>'))}
                    )
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') (Lit_Other ':') 
                        (usage)
                      }
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [1235 1236 1268 16777215]
                )
              ]
              spids: [1073 1077 1271]
            )
          ]
          spids: [1070 1273]
        )
    )
    (C {(shift)} 
      {
        (ArithSubPart
          anode: 
            (ArithBinary
              op_id: Arith_Minus
              left: (ArithVarRef name:OPTIND)
              right: (ArithWord w:{(Lit_Digits 1)})
            )
          spids: [1277 1284]
        )
      }
    )
    (C {(eval)} 
      {
        (DQ ('goflags=(') 
          (BracedVarSub
            token: <VSub_Name GOFLAGS>
            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
            spids: [1294 1297]
          ) (')')
        )
      }
    )
    (C {(eval)} 
      {
        (DQ ('testargs=(') 
          (BracedVarSub
            token: <VSub_Name KUBE_TEST_ARGS>
            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
            spids: [1305 1308]
          ) (')')
        )
      }
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:go_test_grep_pattern)
          op: Equal
          rhs: {(DQ ('.*'))}
          spids: [1316]
        )
      ]
      spids: [1316]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolUnary op_id:BoolUnary_n child:{(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))})
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:goflags)
                  op: PlusEqual
                  rhs: {(ArrayLiteralPart words:[{(-v)}])}
                  spids: [1347]
                )
              ]
              spids: [1347]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:go_test_grep_pattern)
                  op: Equal
                  rhs: 
                    {
                      (DQ ('^[^[:space:]]') (Lit_Other '\\') ('+[[:space:]]') (Lit_Other '\\') 
                        ('+[^[:space:]]') (Lit_Other '\\') ('+/[^[[:space:]]') (Lit_Other '\\') ('+')
                      )
                    }
                  spids: [1357]
                )
              ]
              spids: [1357]
            )
          ]
          spids: [16777215 1344]
        )
      ]
      spids: [16777215 1370]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:testcases)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [1376]
        )
      ]
      spids: [1376]
    )
    (ForEach
      iter_name: arg
      do_arg_iter: True
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name arg))}
                              right: {(-) (Lit_Other '*')}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:goflags)
                          op: PlusEqual
                          rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name arg))}])}
                          spids: [1409]
                        )
                      ]
                      spids: [1409]
                    )
                  ]
                  spids: [16777215 1406]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:testcases)
                      op: PlusEqual
                      rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name arg))}])}
                      spids: [1422]
                    )
                  ]
                  spids: [1422]
                )
              ]
              spids: [1419 1432]
            )
          ]
          spids: [1385 1434]
        )
      spids: [16777215 16777215]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_eq
                      left: 
                        {
                          (BracedVarSub
                            token: <VSub_Name testcases>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1440 1446]
                          )
                        }
                      right: {(0)}
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:testcases)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C 
                                      {(kube) (Lit_Other ':') (Lit_Other ':') (test) (Lit_Other ':') 
                                        (Lit_Other ':') (find_dirs)
                                      }
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [1460 1468]
                            )
                          }
                        ]
                      )
                    }
                  spids: [1458]
                )
              ]
              spids: [1458]
            )
          ]
          spids: [16777215 1455]
        )
      ]
      spids: [16777215 1471]
    )
    (C {(set)} {(--)} 
      {
        (DQ 
          (BracedVarSub
            token: <VSub_Name testcases>
            bracket_op: (WholeArray op_id:Lit_At)
            suffix_op: 
              (StringUnary
                op_id: VTest_Plus
                arg_word: 
                  {
                    (BracedVarSub
                      token: <VSub_Name testcases>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1484 1489]
                    )
                  }
              )
            spids: [1478 1490]
          )
        )
      }
    )
    (FuncDef
      name: junitFilenamePrefix
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(echo)} {(DQ )}) (ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 1516]
                )
              ]
              spids: [16777215 1528]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR))})
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_TEST_API_HASH)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            token: <VSub_Name KUBE_TEST_API>
                                            suffix_op: 
                                              (PatSub
                                                pat: 
                                                  {
                                                    (EscapedLiteralPart
                                                      token: <Lit_EscapedChar '\\/'>
                                                    )
                                                  }
                                                replace: {(-)}
                                                do_all: True
                                                do_prefix: False
                                                do_suffix: False
                                              )
                                            spids: [1572 1579]
                                          )
                                        )
                                      }
                                    )
                                    (C {(${ VSub_Name SHA1SUM)})
                                    (C {(awk)} {(SQ <'{print $1}'>)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [1566 1593]
                        )
                      )
                    }
                  spids: [1564]
                )
              ]
              spids: [1562]
            )
            (C {(echo)} 
              {
                (DQ (${ VSub_Name KUBE_JUNIT_REPORT_DIR) (/junit_) (${ VSub_Name KUBE_TEST_API_HASH) (_) 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (C 
                            {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                              (Lit_Other ':') (sortable_date)
                            }
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [1608 1616]
                  )
                )
              }
            )
          ]
          spids: [1498]
        )
      spids: [1494 1497]
    )
    (FuncDef
      name: verifyAndSuggestPackagePath
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:specified_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [1631]
                )
              ]
              spids: [1629]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:alternative_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [1639]
                )
              ]
              spids: [1637]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:original_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$3'))}
                  spids: [1647]
                )
              ]
              spids: [1645]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:suggestion_package_path)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$4'))}
                  spids: [1655]
                )
              ]
              spids: [1653]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (C {(Lit_Other '[')} {(-d)} {(DQ ($ VSub_Name '$specified_package_path'))} 
                              {(Lit_Other ']')}
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:printable_package_path)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [
                                      (Pipeline
                                        children: [
                                          (C {(echo)} {(DQ ($ VSub_Name '$specified_package_path'))})
                                          (C {(sed)} 
                                            {
                                              (DQ ('s|') ($ VSub_Name '$GOPATH') ('|') 
                                                (EscapedLiteralPart
                                                  token: <Lit_EscapedChar '\\$'>
                                                ) ('GOPATH|')
                                              )
                                            }
                                          )
                                        ]
                                        negated: False
                                      )
                                    ]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [1695 1713]
                              )
                            }
                          spids: [1694]
                        )
                      ]
                      spids: [1692]
                    )
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (error)
                      } {(DQ ("specified test path '") ($ VSub_Name '$printable_package_path') ("' does not exist"))}
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {(-d)} 
                                  {(DQ ($ VSub_Name '$alternative_package_path'))} {(Lit_Other ']')}
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C 
                              {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') 
                                (Lit_Other ':') (info)
                              } 
                              {
                                (DQ ('try changing ') 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar '\\"'>
                                  ) ($ VSub_Name '$original_package_path') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' to ') 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar '\\"'>
                                  ) ($ VSub_Name '$suggestion_package_path') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                                )
                              }
                            )
                          ]
                          spids: [16777215 1745]
                        )
                      ]
                      spids: [16777215 1768]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [16777215 1677]
                )
              ]
              spids: [16777215 1776]
            )
          ]
          spids: [1626]
        )
      spids: [1622 1625]
    )
    (FuncDef
      name: verifyPathsToPackagesUnderTest
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:packages_under_test)
                  op: Equal
                  rhs: {(ArrayLiteralPart words:[{($ VSub_At '$@')}])}
                  spids: [1790]
                )
              ]
              spids: [1788]
            )
            (ForEach
              iter_name: package_path
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name packages_under_test>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1804 1809]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:local_package_path)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$package_path'))}
                          spids: [1818]
                        )
                      ]
                      spids: [1816]
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:go_package_path)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$GOPATH') (/src/) ($ VSub_Name '$package_path'))}
                          spids: [1826]
                        )
                      ]
                      spids: [1824]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              token: <VSub_Name package_path>
                                              suffix_op: 
                                                (Slice
                                                  begin: (ArithWord w:{(Lit_Digits 0)})
                                                  length: (ArithWord w:{(Lit_Digits 2)})
                                                )
                                              spids: [1840 1846]
                                            )
                                          )
                                        }
                                      right: {(DQ (./))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(verifyAndSuggestPackagePath)} 
                              {(DQ ($ VSub_Name '$local_package_path'))} {(DQ ($ VSub_Name '$go_package_path'))} {(DQ ($ VSub_Name '$package_path'))} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name package_path>
                                    suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 2)}))
                                    spids: [1877 1881]
                                  )
                                )
                              }
                            )
                          ]
                          spids: [16777215 1859]
                        )
                      ]
                      else_action: [
                        (C {(verifyAndSuggestPackagePath)} {(DQ ($ VSub_Name '$go_package_path'))} 
                          {(DQ ($ VSub_Name '$local_package_path'))} {(DQ ($ VSub_Name '$package_path'))} {(DQ (./) ($ VSub_Name '$package_path'))}
                        )
                      ]
                      spids: [1885 1908]
                    )
                  ]
                  spids: [1813 1911]
                )
              spids: [1802 1811]
            )
          ]
          spids: [1785]
        )
      spids: [1781 1784]
    )
    (FuncDef
      name: produceJUnitXMLReport
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_filename_prefix)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [1927]
                )
              ]
              spids: [1923]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name junit_filename_prefix))}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(ControlFlow token:<ControlFlow_Return return>)]
                  spids: [16777215 1946]
                )
              ]
              spids: [16777215 1952]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:test_stdout_filenames) op:Equal spids:[1958])]
              spids: [1956]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:junit_xml_filename) op:Equal spids:[1963])]
              spids: [1961]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:test_stdout_filenames)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(ls)} 
                                {(${ VSub_Name junit_filename_prefix) (Lit_Other '*') (.stdout)}
                              )
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [1967 1975]
                      )
                    }
                  spids: [1966]
                )
              ]
              spids: [1966]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_xml_filename)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name junit_filename_prefix) (.xml))}
                  spids: [1978]
                )
              ]
              spids: [1978]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(command)} {(-v)} {(go-junit-report)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: 16777215
                                  arg_word: {(/dev/null)}
                                  spids: [1997]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [2000]
                                )
                              ]
                            )
                          ]
                          negated: True
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (error)
                      } {(DQ ('go-junit-report not found; please install with '))} 
                      {(DQ ('go get -u github.com/jstemmer/go-junit-report'))}
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [16777215 2004]
                )
              ]
              spids: [16777215 2029]
            )
            (Pipeline
              children: [
                (C {(cat)} {(${ VSub_Name test_stdout_filenames)})
                (SimpleCommand
                  words: [{(go-junit-report)}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(DQ (${ VSub_Name junit_xml_filename))}
                      spids: [2042]
                    )
                  ]
                )
              ]
              negated: False
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_KEEP_VERBOSE_TEST_OUTPUT)}
                                  right: 
                                    {(Lit_Other '^') (Lit_Other '[') (yY) (Lit_Other ']') 
                                      (Lit_Other '$')
                                    }
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(rm)} {(${ VSub_Name test_stdout_filenames)})]
                  spids: [16777215 2072]
                )
              ]
              spids: [16777215 2082]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Saved JUnit XML test report to ') (${ VSub_Name junit_xml_filename))}
            )
          ]
          spids: [1920]
        )
      spids: [1916 1919]
    )
    (FuncDef
      name: runTests
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:junit_filename_prefix) op:Equal spids:[2112])]
              spids: [2110]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:junit_filename_prefix)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(junitFilenamePrefix)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [2116 2118]
                      )
                    }
                  spids: [2115]
                )
              ]
              spids: [2115]
            )
            (C {(verifyPathsToPackagesUnderTest)} {(DQ ($ VSub_At '$@'))})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_COVER)}
                                  right: 
                                    {(Lit_Other '^') (Lit_Other '[') (yY) (Lit_Other ']') 
                                      (Lit_Other '$')
                                    }
                                )
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (status)
                      } {(DQ ('Running tests without code coverage'))}
                    )
                    (C {(go)} {(test)} {(-i)} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2200 2205]
                                    )
                                  }
                              )
                            spids: [2194 2206]
                          )
                        )
                      } {(${ VSub_Name KUBE_RACE)} {(${ VSub_Name KUBE_TIMEOUT)} {(DQ (${ VSub_At '@'))} 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2234 2239]
                                    )
                                  }
                              )
                            spids: [2228 2240]
                          )
                        )
                      }
                    )
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (C {(go)} {(test)} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name goflags>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: 
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name goflags>
                                              bracket_op: (WholeArray op_id:Lit_At)
                                              spids: [2255 2260]
                                            )
                                          }
                                      )
                                    spids: [2249 2261]
                                  )
                                )
                              } {(${ VSub_Name KUBE_RACE)} {(${ VSub_Name KUBE_TIMEOUT)} {(DQ (${ VSub_At '@'))} 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name testargs>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    suffix_op: 
                                      (StringUnary
                                        op_id: VTest_ColonPlus
                                        arg_word: 
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name testargs>
                                              bracket_op: (WholeArray op_id:Lit_At)
                                              spids: [2289 2294]
                                            )
                                          }
                                      )
                                    spids: [2283 2295]
                                  )
                                )
                              }
                            )
                            (C {(tee)} 
                              {
                                (BracedVarSub
                                  token: <VSub_Name junit_filename_prefix>
                                  suffix_op: 
                                    (StringUnary
                                      op_id: VTest_ColonPlus
                                      arg_word: {(DQ (${ VSub_Name junit_filename_prefix) (.stdout))}
                                    )
                                  spids: [2304 2313]
                                )
                              }
                            )
                            (C {(grep)} {(DQ (${ VSub_Name go_test_grep_pattern))})
                          ]
                          negated: False
                        )
                        (AndOr
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:rc)
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [2329]
                                )
                              ]
                              spids: [2329]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:rc)
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [2334]
                                )
                              ]
                              spids: [2334]
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      op_id: Op_DAmp
                    )
                    (C {(produceJUnitXMLReport)} {(DQ (${ VSub_Name junit_filename_prefix))})
                    (ControlFlow
                      token: <ControlFlow_Return return>
                      arg_word: {(${ VSub_Name rc)}
                    )
                  ]
                  spids: [16777215 2159]
                )
              ]
              spids: [16777215 2354]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_TEST_API_HASH)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {(-n)} 
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            token: <VSub_Name KUBE_TEST_API>
                                            suffix_op: 
                                              (PatSub
                                                pat: 
                                                  {
                                                    (EscapedLiteralPart
                                                      token: <Lit_EscapedChar '\\/'>
                                                    )
                                                  }
                                                replace: {(-)}
                                                do_all: True
                                                do_prefix: False
                                                do_suffix: False
                                              )
                                            spids: [2370 2377]
                                          )
                                        )
                                      }
                                    )
                                    (C {(${ VSub_Name SHA1SUM)})
                                    (C {(awk)} {(SQ <'{print $1}'>)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [2364 2391]
                        )
                      )
                    }
                  spids: [2362]
                )
              ]
              spids: [2362]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_report_dir)
                  op: Equal
                  rhs: 
                    {
                      (DQ (/tmp/k8s_coverage/) (${ VSub_Name KUBE_TEST_API_HASH) (/) 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (C 
                                  {(kube) (Lit_Other ':') (Lit_Other ':') (util) (Lit_Other ':') 
                                    (Lit_Other ':') (sortable_date)
                                  }
                                )
                              ]
                            )
                          left_token: <Left_CommandSub '$('>
                          spids: [2402 2410]
                        )
                      )
                    }
                  spids: [2395]
                )
              ]
              spids: [2395]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_profile)
                  op: Equal
                  rhs: {(DQ (coverage.out))}
                  spids: [2414]
                )
              ]
              spids: [2414]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ("Saving coverage output in '") (${ VSub_Name cover_report_dir) ("'"))}
            )
            (C {(mkdir)} {(-p)} 
              {
                (DQ 
                  (BracedVarSub
                    token: <VSub_At '@'>
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_Plus
                        arg_word: 
                          {
                            (BracedVarSub
                              token: <VSub_At '@'>
                              suffix_op: 
                                (PatSub
                                  pat: {}
                                  replace: {(${ VSub_Name cover_report_dir) (Lit_Slash /)}
                                  do_all: False
                                  do_prefix: True
                                  do_suffix: False
                                )
                              spids: [2448 2457]
                            )
                          }
                      )
                    spids: [2445 2458]
                  )
                )
              }
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:cover_ignore_dirs)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (
'vendor/k8s.io/code-generator/cmd/generator|vendor/k8s.io/client-go/1.4/rest'
                        )
                      )
                    }
                  spids: [2520]
                )
              ]
              spids: [2520]
            )
            (ForEach
              iter_name: path
              iter_words: [
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(echo)} {($ VSub_Name '$cover_ignore_dirs')})
                              (C {(sed)} {(SQ <'s/|/ /g'>)})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_CommandSub '$('>
                    spids: [2532 2544]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-e)} 
                      {(DQ (skipped) (Lit_Other '\\') (tk8s.io/kubernetes/) ($ VSub_Name '$path'))}
                    )
                  ]
                  spids: [2547 2562]
                )
              spids: [2531 2545]
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (n))} {(DQ (${ VSub_At '@'))})
                    (C {(grep)} {(-Ev)} {($ VSub_Name '$cover_ignore_dirs')})
                    (C {(xargs)} {(-I) (Lit_LBrace '{') (Lit_RBrace '}')} {(-n)} {(1)} {(-P)} 
                      {(${ VSub_Name KUBE_COVERPROCS)} {(bash)} {(-c)} 
                      {
                        (DQ ('set -o pipefail; _pkg=') 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (0) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('; _pkg_out=') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{_pkg//') (Lit_Other '\\') 
                          ('//_}; ') ('      go test -i ') 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2650 2655]
                                    )
                                  }
                              )
                            spids: [2644 2656]
                          ) (' ') ('        ') (${ VSub_Name KUBE_RACE) (' ') ('        ') (${ VSub_Name KUBE_TIMEOUT) (' ') 
                          ('        -cover -covermode=') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name KUBE_COVERMODE) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        -coverprofile=') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (${ VSub_Name cover_report_dir) (/) (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{_pkg}/') (${ VSub_Name cover_profile) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{_pkg}') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        ') 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2707 2712]
                                    )
                                  }
                              )
                            spids: [2701 2713]
                          ) ('\n') ('      go test ') 
                          (BracedVarSub
                            token: <VSub_Name goflags>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name goflags>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2722 2727]
                                    )
                                  }
                              )
                            spids: [2716 2728]
                          ) (' ') ('        ') (${ VSub_Name KUBE_RACE) (' ') ('        ') (${ VSub_Name KUBE_TIMEOUT) (' ') 
                          ('        -cover -covermode=') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name KUBE_COVERMODE) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        -coverprofile=') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (${ VSub_Name cover_report_dir) (/) (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{_pkg}/') (${ VSub_Name cover_profile) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{_pkg}') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' ') ('        ') 
                          (BracedVarSub
                            token: <VSub_Name testargs>
                            bracket_op: (WholeArray op_id:Lit_At)
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {
                                    (BracedVarSub
                                      token: <VSub_Name testargs>
                                      bracket_op: (WholeArray op_id:Lit_At)
                                      spids: [2779 2784]
                                    )
                                  }
                              )
                            spids: [2773 2785]
                          ) (' ') ('      | tee ') 
                          (BracedVarSub
                            token: <VSub_Name junit_filename_prefix>
                            suffix_op: 
                              (StringUnary
                                op_id: VTest_ColonPlus
                                arg_word: 
                                  {(EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                                    (${ VSub_Name junit_filename_prefix) (-) (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (_pkg_out.stdout) 
                                    (EscapedLiteralPart
                                      token: <Lit_EscapedChar '\\"'>
                                    )
                                  }
                              )
                            spids: [2789 2800]
                          ) (' ') ('      | grep ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                          (${ VSub_Name go_test_grep_pattern) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                        )
                      } {(Lit_LBrace '{') (Lit_RBrace '}')}
                    )
                  ]
                  negated: False
                )
                (AndOr
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:test_result)
                          op: Equal
                          rhs: {($ VSub_QMark '$?')}
                          spids: [2820]
                        )
                      ]
                      spids: [2820]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:test_result)
                          op: Equal
                          rhs: {($ VSub_QMark '$?')}
                          spids: [2825]
                        )
                      ]
                      spids: [2825]
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
            (C {(produceJUnitXMLReport)} {(DQ (${ VSub_Name junit_filename_prefix))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:COMBINED_COVER_PROFILE)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cover_report_dir) (/combined-coverage.out))}
                  spids: [2840]
                )
              ]
              spids: [2840]
            )
            (BraceGroup
              children: [
                (C {(echo)} {(DQ ('mode: ') (${ VSub_Name KUBE_COVERMODE))})
                (ForEach
                  iter_name: x
                  iter_words: [
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(find)} {(DQ (${ VSub_Name cover_report_dir))} {(-name)} 
                                {(DQ (${ VSub_Name cover_profile))}
                              )
                            ]
                          )
                        left_token: <Left_Backtick '`'>
                        spids: [2893 2909]
                      )
                    }
                  ]
                  do_arg_iter: False
                  body: 
                    (DoGroup
                      children: [
                        (AndOr
                          children: [
                            (Pipeline
                              children: [
                                (C {(cat)} {($ VSub_Name '$x')})
                                (C {(grep)} {(-h)} {(-v)} {(DQ ('^mode:'))})
                              ]
                              negated: False
                            )
                            (C {(true)})
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      spids: [2912 2936]
                    )
                  spids: [2892 2910]
                )
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name COMBINED_COVER_PROFILE))}
                  spids: [2941]
                )
              ]
              spids: [2849]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:coverage_html_file)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name cover_report_dir) (/combined-coverage.html))}
                  spids: [2950]
                )
              ]
              spids: [2950]
            )
            (C {(go)} {(tool)} {(cover)} 
              {(-html) (Lit_Other '=') (DQ (${ VSub_Name COMBINED_COVER_PROFILE))} {(-o) (Lit_Other '=') (DQ (${ VSub_Name coverage_html_file))}
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Combined coverage report: ') (${ VSub_Name coverage_html_file))}
            )
            (ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {(${ VSub_Name test_result)}
            )
          ]
          spids: [2107]
        )
      spids: [2103 2106]
    )
    (FuncDef
      name: reportCoverageToCoveralls
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (DBracket
                              expr: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(${ VSub_Name KUBE_COVER)}
                                  right: 
                                    {(Lit_Other '^') (Lit_Other '[') (yY) (Lit_Other ']') 
                                      (Lit_Other '$')
                                    }
                                )
                            )
                            (DBracket
                              expr: 
                                (BoolUnary
                                  op_id: BoolUnary_x
                                  child: {(DQ (${ VSub_Name KUBE_GOVERALLS_BIN))}
                                )
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C 
                      {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') 
                        (status)
                      } 
                      {
                        (DQ ('Reporting coverage results to Coveralls for service ') 
                          (BracedVarSub
                            token: <VSub_Name CI_NAME>
                            suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                            spids: [3061 3064]
                          )
                        )
                      }
                    )
                    (AndOr
                      children: [
                        (C {(${ VSub_Name KUBE_GOVERALLS_BIN)} 
                          {(-coverprofile) (Lit_Other '=') (DQ (${ VSub_Name COMBINED_COVER_PROFILE))} 
                          {
                            (BracedVarSub
                              token: <VSub_Name CI_NAME>
                              suffix_op: 
                                (StringUnary
                                  op_id: VTest_ColonPlus
                                  arg_word: {(DQ ('-service=') (${ VSub_Name CI_NAME))}
                                )
                              spids: [3082 3091]
                            )
                          } 
                          {
                            (BracedVarSub
                              token: <VSub_Name COVERALLS_REPO_TOKEN>
                              suffix_op: 
                                (StringUnary
                                  op_id: VTest_ColonPlus
                                  arg_word: {(DQ ('-repotoken=') (${ VSub_Name COVERALLS_REPO_TOKEN))}
                                )
                              spids: [3095 3104]
                            )
                          }
                        )
                        (C {(true)})
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [16777215 3048]
                )
              ]
              spids: [16777215 3113]
            )
          ]
          spids: [3012]
        )
      spids: [3008 3011]
    )
    (FuncDef
      name: checkFDs
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:fileslimit)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(ulimit)} {(-n)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [3137 3141]
                        )
                      )
                    }
                  spids: [3135]
                )
              ]
              spids: [3133]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_lt
                              left: {($ VSub_Name '$fileslimit')}
                              right: {(1000)}
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Sentence
                      child: 
                        (C {(echo)} 
                          {
                            (DQ ('WARNING: ulimit -n (files) should be at least 1000, is ') 
                              ($ VSub_Name '$fileslimit') (', may cause test failure')
                            )
                          }
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  spids: [16777215 3158]
                )
              ]
              spids: [16777215 3171]
            )
          ]
          spids: [3122]
        )
      spids: [3118 3121]
    )
    (C {(checkFDs)})
    (SimpleCommand
      words: [{(read)} {(-a)} {(apiVersions)}]
      redirects: [
        (Redir
          op_id: Redir_TLess
          fd: 16777215
          arg_word: {(DQ (${ VSub_Name KUBE_TEST_API_VERSIONS))}
          spids: [3194]
        )
      ]
      more_env: [(env_pair name:IFS val:{(SQ <';'>)} spids:[3183])]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:apiVersionsCount)
          op: Equal
          rhs: 
            {
              (BracedVarSub
                token: <VSub_Name apiVersions>
                prefix_op: VSub_Pound
                bracket_op: (WholeArray op_id:Lit_At)
                spids: [3203 3209]
              )
            }
          spids: [3202]
        )
      ]
      spids: [3202]
    )
    (ForExpr
      init: (BinaryAssign op_id:Arith_Equal left:(LhsName name:i) right:(ArithWord w:{(Lit_Digits 0)}))
      cond: 
        (ArithBinary
          op_id: Arith_Less
          left: (ArithVarRef name:i)
          right: (ArithWord w:{(${ VSub_Name apiVersionsCount)})
        )
      update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:apiVersion)
                  op: Equal
                  rhs: 
                    {
                      (BracedVarSub
                        token: <VSub_Name apiVersions>
                        bracket_op: (ArrayIndex expr:(ArithVarRef name:i))
                        spids: [3238 3243]
                      )
                    }
                  spids: [3237]
                )
              ]
              spids: [3237]
            )
            (C {(echo)} {(DQ ('Running tests for APIVersion: ') ($ VSub_Name '$apiVersion'))})
            (SimpleCommand
              words: [{(runTests)} {(DQ ($ VSub_At '$@'))}]
              more_env: [
                (env_pair
                  name: KUBE_TEST_API
                  val: {(DQ (${ VSub_Name apiVersion))}
                  spids: [3258]
                )
              ]
            )
          ]
          spids: [3234 3271]
        )
    )
    (C {(reportCoverageToCoveralls)})
  ]
)