(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/util.sh))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:EXCLUDED_PATTERNS)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(DQ (verify-all.sh))}
                  {(DQ (verify-linkcheck.sh))}
                  {(DQ (verify-test-owners.sh))}
                  {(DQ ('verify-*-dockerized.sh'))}
                ]
              )
            }
          spids: [88]
        )
      ]
      spids: [88]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:QUICK_PATTERNS)
          op: PlusEqual
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(DQ (verify-api-groups.sh))}
                  {(DQ (verify-bazel.sh))}
                  {(DQ (verify-boilerplate.sh))}
                  {(DQ (verify-generated-files-remake))}
                  {(DQ (verify-godep-licenses.sh))}
                  {(DQ (verify-gofmt.sh))}
                  {(DQ (verify-pkg-names.sh))}
                  {(DQ (verify-readonly-packages.sh))}
                  {(DQ (verify-staging-client-go.sh))}
                  {(DQ (verify-staging-imports.sh))}
                  {(DQ (verify-test-images.sh))}
                  {(DQ (verify-test-owners.sh))}
                ]
              )
            }
          spids: [136]
        )
      ]
      spids: [136]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:EXCLUDED_CHECKS)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [
                          (SimpleCommand
                            words: [
                              {(ls)}
                              {
                                (BracedVarSub
                                  token: <VSub_Name EXCLUDED_PATTERNS>
                                  bracket_op: (WholeArray op_id:Lit_At)
                                  suffix_op: 
                                    (PatSub
                                      pat: {}
                                      replace: 
                                        {(${ VSub_Name KUBE_ROOT) 
                                          (EscapedLiteralPart
                                            token: <Lit_EscapedChar '\\/'>
                                          ) (hack) (EscapedLiteralPart token:<Lit_EscapedChar '\\/'>)
                                        }
                                      do_all: False
                                      do_prefix: True
                                      do_suffix: False
                                    )
                                  spids: [206 220]
                                )
                              }
                            ]
                            redirects: [
                              (Redir
                                op_id: Redir_Great
                                fd: 2
                                arg_word: {(/dev/null)}
                                spids: [222]
                              )
                            ]
                          )
                          (C {(true)})
                        ]
                        op_id: Op_DPipe
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [203 228]
              )
            }
          spids: [202]
        )
      ]
      spids: [202]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:QUICK_CHECKS)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [
                          (SimpleCommand
                            words: [
                              {(ls)}
                              {
                                (BracedVarSub
                                  token: <VSub_Name QUICK_PATTERNS>
                                  bracket_op: (WholeArray op_id:Lit_At)
                                  suffix_op: 
                                    (PatSub
                                      pat: {}
                                      replace: 
                                        {(${ VSub_Name KUBE_ROOT) 
                                          (EscapedLiteralPart
                                            token: <Lit_EscapedChar '\\/'>
                                          ) (hack) (EscapedLiteralPart token:<Lit_EscapedChar '\\/'>)
                                        }
                                      do_all: False
                                      do_prefix: True
                                      do_suffix: False
                                    )
                                  spids: [234 248]
                                )
                              }
                            ]
                            redirects: [
                              (Redir
                                op_id: Redir_Great
                                fd: 2
                                arg_word: {(/dev/null)}
                                spids: [250]
                              )
                            ]
                          )
                          (C {(true)})
                        ]
                        op_id: Op_DPipe
                      )
                    ]
                  )
                left_token: <Left_CommandSub '$('>
                spids: [231 256]
              )
            }
          spids: [230]
        )
      ]
      spids: [230]
    )
    (FuncDef
      name: is-excluded
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: e
              iter_words: [
                {
                  (BracedVarSub
                    token: <VSub_Name EXCLUDED_CHECKS>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [272 277]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_ef
                                      left: {($ VSub_Number '$1')}
                                      right: {(DQ ($ VSub_Name '$e'))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return>)]
                          spids: [16777215 298]
                        )
                      ]
                      spids: [16777215 304]
                    )
                  ]
                  spids: [280 307]
                )
              spids: [271 278]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [263]
        )
      spids: [259 262]
    )
    (FuncDef
      name: is-quick
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: e
              iter_words: [
                {
                  (BracedVarSub
                    token: <VSub_Name QUICK_CHECKS>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [330 335]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_ef
                                      left: {($ VSub_Number '$1')}
                                      right: {(DQ ($ VSub_Name '$e'))}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(ControlFlow token:<ControlFlow_Return return>)]
                          spids: [16777215 356]
                        )
                      ]
                      spids: [16777215 362]
                    )
                  ]
                  spids: [338 365]
                )
              spids: [329 336]
            )
            (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})
          ]
          spids: [321]
        )
      spids: [317 320]
    )
    (FuncDef
      name: run-cmd
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [(Sentence child:(C {(${ VSub_Name SILENT)}) terminator:<Op_Semi ';'>)]
                  action: [
                    (Sentence
                      child: (C {(DQ ($ VSub_At '$@'))})
                      terminator: <Op_Amp '&'>
                    )
                    (SimpleCommand
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: 16777215
                          arg_word: {(/dev/null)}
                          spids: [397]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 389]
                )
              ]
              else_action: [(C {(DQ ($ VSub_At '$@'))})]
              spids: [402 410]
            )
          ]
          spids: [379]
        )
      spids: [375 378]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:FAILED_TESTS)
          op: Equal
          rhs: {(ArrayLiteralPart)}
          spids: [418]
        )
      ]
      spids: [418]
    )
    (FuncDef
      name: print-failed-tests
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(-e)} {(DQ ('========================'))})
            (C {(echo)} {(-e)} {(DQ (${ VSub_Name color_red) ('FAILED TESTS') (${ VSub_Name color_norm))})
            (C {(echo)} {(-e)} {(DQ ('========================'))})
            (ForEach
              iter_name: t
              iter_words: [
                {
                  (BracedVarSub
                    token: <VSub_Name FAILED_TESTS>
                    bracket_op: (WholeArray op_id:Lit_At)
                    spids: [469 474]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(echo)} {(-e)} 
                      {(DQ (${ VSub_Name color_red) (${ VSub_Name t) (${ VSub_Name color_norm))}
                    )
                  ]
                  spids: [477 497]
                )
              spids: [468 475]
            )
          ]
          spids: [427]
        )
      spids: [423 426]
    )
    (FuncDef
      name: run-checks
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:pattern)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [513]
                )
              ]
              spids: [509]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:runner)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [521]
                )
              ]
              spids: [517]
            )
            (ForEach
              iter_name: t
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(ls)} {(${ VSub_Name pattern)})])
                    left_token: <Left_CommandSub '$('>
                    spids: [532 538]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: (C {(is-excluded)} {(DQ (${ VSub_Name t))})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ('Skipping ') (${ VSub_Name t))})
                            (ControlFlow
                              token: <ControlFlow_Continue continue>
                            )
                          ]
                          spids: [16777215 556]
                        )
                      ]
                      spids: [16777215 572]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (AndOr
                                  children: [
                                    (C {(${ VSub_Name QUICK)})
                                    (Pipeline
                                      children: [(C {(is-quick)} {(DQ (${ VSub_Name t))})]
                                      negated: True
                                    )
                                  ]
                                  op_id: Op_DAmp
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ ('Skipping ') (${ VSub_Name t) (' in quick mode'))})
                            (ControlFlow
                              token: <ControlFlow_Continue continue>
                            )
                          ]
                          spids: [16777215 595]
                        )
                      ]
                      spids: [16777215 612]
                    )
                    (C {(echo)} {(-e)} {(DQ ('Verifying ') (${ VSub_Name t))})
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:start)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(date)} {(Lit_Other '+') (Lit_Other '%') (s)})]
                                  )
                                left_token: <Left_CommandSub '$('>
                                spids: [630 636]
                              )
                            }
                          spids: [629]
                        )
                      ]
                      spids: [627]
                    )
                    (AndOr
                      children: [
                        (C {(run-cmd)} {(DQ (${ VSub_Name runner))} {(DQ (${ VSub_Name t))})
                        (AndOr
                          children: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:tr)
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [655]
                                )
                              ]
                              spids: [655]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:tr)
                                  op: Equal
                                  rhs: {($ VSub_QMark '$?')}
                                  spids: [660]
                                )
                              ]
                              spids: [660]
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      ]
                      op_id: Op_DAmp
                    )
                    (Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:elapsed)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: 
                                      (ArithWord
                                        w: 
                                          {
                                            (CommandSubPart
                                              command_list: 
                                                (CommandList
                                                  children: [
                                                    (C {(date)} {(Lit_Other '+') (Lit_Other '%') (s)})
                                                  ]
                                                )
                                              left_token: <Left_CommandSub '$('>
                                              spids: [668 674]
                                            )
                                          }
                                      )
                                    right: (ArithWord w:{(${ VSub_Name start)})
                                  )
                                spids: [667 682]
                              )
                            }
                          spids: [666]
                        )
                      ]
                      spids: [664]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_eq
                                      left: {(${ VSub_Name tr)}
                                      right: {(0)}
                                    )
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [
                            (C {(echo)} {(-e)} 
                              {
                                (DQ (${ VSub_Name color_green) (SUCCESS) (${ VSub_Name color_norm) 
                                  ('  ') (${ VSub_Name t) (Lit_Other '\\') (t) (${ VSub_Name elapsed) (s)
                                )
                              }
                            )
                          ]
                          spids: [16777215 700]
                        )
                      ]
                      else_action: [
                        (C {(echo)} {(-e)} 
                          {
                            (DQ (${ VSub_Name color_red) (FAILED) (${ VSub_Name color_norm) ('   ') 
                              (${ VSub_Name t) (Lit_Other '\\') (t) (${ VSub_Name elapsed) (s)
                            )
                          }
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(1)} spids:[756])]
                          spids: [756]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:FAILED_TESTS)
                              op: PlusEqual
                              rhs: {(ArrayLiteralPart words:[{(${ VSub_Name t)}])}
                              spids: [760]
                            )
                          ]
                          spids: [760]
                        )
                      ]
                      spids: [728 768]
                    )
                  ]
                  spids: [541 771]
                )
              spids: [531 16777215]
            )
          ]
          spids: [506]
        )
      spids: [502 505]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:SILENT) op:Equal rhs:{(true)} spids:[776])]
      spids: [776]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:QUICK) op:Equal rhs:{(false)} spids:[779])]
      spids: [779]
    )
    (While
      cond: [(Sentence child:(C {(getopts)} {(DQ (':vQ'))} {(opt)}) terminator:<Op_Semi ';'>)]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(${ VSub_Name opt)}
              arms: [
                (case_arm
                  pat_list: [{(v)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:SILENT)
                          op: Equal
                          rhs: {(false)}
                          spids: [810]
                        )
                      ]
                      spids: [810]
                    )
                  ]
                  spids: [806 807 814 16777215]
                )
                (case_arm
                  pat_list: [{(Q)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:QUICK)
                          op: Equal
                          rhs: {(true)}
                          spids: [821]
                        )
                      ]
                      spids: [821]
                    )
                  ]
                  spids: [817 818 825 16777215]
                )
                (case_arm
                  pat_list: [{(EscapedLiteralPart token:<Lit_EscapedChar '\\?'>)}]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ('Invalid flag: -') (${ VSub_Name OPTARG))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:16777215 arg_word:{(2)} spids:[841])]
                    )
                    (C {(exit)} {(1)})
                  ]
                  spids: [828 829 850 16777215]
                )
              ]
              spids: [797 803 853]
            )
          ]
          spids: [794 855]
        )
    )
    (If
      arms: [
        (if_arm
          cond: [(Sentence child:(C {(${ VSub_Name SILENT)}) terminator:<Op_Semi ';'>)]
          action: [
            (C {(echo)} {(DQ ('Running in silent mode, run with -v if you want to see script logs.'))})
          ]
          spids: [16777215 866]
        )
      ]
      spids: [16777215 875]
    )
    (If
      arms: [
        (if_arm
          cond: [(Sentence child:(C {(${ VSub_Name QUICK)}) terminator:<Op_Semi ';'>)]
          action: [(C {(echo)} {(DQ ('Running in quick mode (-Q flag). Only fast checks will run.'))})]
          spids: [16777215 886]
        )
      ]
      spids: [16777215 895]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[898])]
      spids: [898]
    )
    (C {(run-checks)} {(DQ (${ VSub_Name KUBE_ROOT) ('/hack/verify-*.sh'))} {(bash)})
    (C {(run-checks)} {(DQ (${ VSub_Name KUBE_ROOT) ('/hack/verify-*.py'))} {(python)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: (BoolBinary op_id:BoolBinary_eq left:{(${ VSub_Name ret)} right:{(1)})
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(print-failed-tests)})]
          spids: [16777215 939]
        )
      ]
      spids: [16777215 945]
    )
    (C {(exit)} {(${ VSub_Name ret)})
  ]
)