(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: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [(C {(dirname)} {(DQ (${ VSub_Name BASH_SOURCE))})]
                    )
                  left_token: <Left_CommandSub '$('>
                  spids: [93 101]
                ) (/../..)
              )
            }
          spids: [91]
        )
      ]
      spids: [91]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DEPLOY_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/federation/deploy))}
          spids: [105]
        )
      ]
      spids: [105]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CUR_ROOT)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(pwd)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [115 117]
                )
              )
            }
          spids: [113]
        )
      ]
      spids: [113]
    )
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/build/common.sh))})
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/build/util.sh))})
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/cluster/kube-util.sh))})
    (C {(source)} {(DQ (${ VSub_Name KUBE_ROOT) (/cluster/lib/logging.sh))})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:TMP_DIR)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: (CommandList children:[(C {(mktemp)} {(-d)})])
                  left_token: <Left_CommandSub '$('>
                  spids: [168 172]
                )
              )
            }
          spids: [166]
        )
      ]
      spids: [164]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:FEDERATION_OUTPUT_ROOT)
          op: Equal
          rhs: {(DQ (${ VSub_Name LOCAL_OUTPUT_ROOT) (/federation))}
          spids: [177]
        )
      ]
      spids: [175]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:VERSIONS_FILE)
          op: Equal
          rhs: {(DQ (${ VSub_Name FEDERATION_OUTPUT_ROOT) (/versions))}
          spids: [187]
        )
      ]
      spids: [185]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalOr
                      left: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ (${ VSub_Name KUBERNETES_PROVIDER))}
                          right: {(DQ (gke))}
                        )
                      right: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: {(DQ (${ VSub_Name KUBERNETES_PROVIDER))}
                          right: {(DQ (gce))}
                        )
                    )
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(detect-project)})
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_PROJECT)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name KUBE_PROJECT>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonHyphen
                              arg_word: 
                                {
                                  (BracedVarSub
                                    token: <VSub_Name PROJECT>
                                    suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{})
                                    spids: [242 245]
                                  )
                                }
                            )
                          spids: [239 246]
                        )
                      )
                    }
                  spids: [237]
                )
              ]
              spids: [235]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:KUBE_REGISTRY)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name KUBE_REGISTRY>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonHyphen
                              arg_word: {(gcr.io) (Lit_Slash /) (${ VSub_Name KUBE_PROJECT)}
                            )
                          spids: [254 262]
                        )
                      )
                    }
                  spids: [252]
                )
              ]
              spids: [250]
            )
          ]
          spids: [16777215 229]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_Readonly
          pairs: [
            (assign_pair
              lhs: (LhsName name:KUBE_PROJECT)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name KUBE_PROJECT>
                      suffix_op: 
                        (StringUnary
                          op_id: VTest_ColonHyphen
                          arg_word: 
                            {
                              (BracedVarSub
                                token: <VSub_Name PROJECT>
                                suffix_op: 
                                  (StringUnary
                                    op_id: VTest_ColonHyphen
                                    arg_word: {(federation)}
                                  )
                                spids: [275 279]
                              )
                            }
                        )
                      spids: [272 280]
                    )
                  )
                }
              spids: [270]
            )
          ]
          spids: [268]
        )
        (Assignment
          keyword: Assign_Readonly
          pairs: [
            (assign_pair
              lhs: (LhsName name:KUBE_REGISTRY)
              op: Equal
              rhs: 
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name KUBE_REGISTRY>
                      suffix_op: 
                        (StringUnary
                          op_id: VTest_ColonHyphen
                          arg_word: {('localhost:5000') (Lit_Slash /) (${ VSub_Name KUBE_PROJECT)}
                        )
                      spids: [288 296]
                    )
                  )
                }
              spids: [286]
            )
          ]
          spids: [284]
        )
      ]
      spids: [265 299]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:KUBE_VERSION)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Name KUBE_VERSION>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                  spids: [310 313]
                )
              )
            }
          spids: [308]
        )
      ]
      spids: [308]
    )
    (FuncDef
      name: cleanup
      body: 
        (BraceGroup
          children: [
            (C {(rm)} {(-rf)} {(DQ (${ VSub_Name TMP_DIR))})
            (C {(cd)} {(DQ (${ VSub_Name CUR_ROOT))})
          ]
          spids: [322]
        )
      spids: [318 321]
    )
    (C {(trap)} {(cleanup)} {(EXIT)})
    (FuncDef
      name: dirty_sha
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:index)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/.git/index))}
                  spids: [366]
                )
              ]
              spids: [362]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:objects_dir)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name KUBE_ROOT) (/.git/objects))}
                  spids: [379]
                )
              ]
              spids: [375]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tmp_dir)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name TMP_DIR) (/.git))}
                  spids: [393]
                )
              ]
              spids: [389]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tmp_index)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name tmp_dir) (/index))}
                  spids: [406]
                )
              ]
              spids: [402]
            )
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:tmp_objects_dir)
                  op: Equal
                  rhs: {(DQ (${ VSub_Name tmp_dir) (/objects))}
                  spids: [419]
                )
              ]
              spids: [415]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name tmp_objects_dir))})
            (C {(cp)} {(DQ (${ VSub_Name index))} {(DQ (${ VSub_Name tmp_index))})
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:files)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (C {(git)} {(ls-files)} {(-m)} {(-o)} {(-d)} {(--exclude-standard)})
                            ]
                          )
                        left_token: <Left_CommandSub '$('>
                        spids: [461 473]
                      )
                    }
                  spids: [460]
                )
              ]
              spids: [456]
            )
            (SimpleCommand
              words: [{(git)} {(add)} {(${ VSub_Name files)}]
              more_env: [
                (env_pair
                  name: GIT_INDEX_FILE
                  val: {(DQ (${ VSub_Name tmp_index))}
                  spids: [476]
                )
              ]
            )
            (SimpleCommand
              words: [{(git)} {(write-tree)}]
              more_env: [
                (env_pair
                  name: GIT_ALTERNATE_OBJECT_DIRECTORIES
                  val: {(DQ (${ VSub_Name objects_dir))}
                  spids: [492]
                )
                (env_pair
                  name: GIT_OBJECT_DIRECTORY
                  val: {(DQ (${ VSub_Name tmp_objects_dir))}
                  spids: [499]
                )
                (env_pair
                  name: GIT_INDEX_FILE
                  val: {(DQ (${ VSub_Name tmp_index))}
                  spids: [506]
                )
              ]
            )
          ]
          spids: [359]
        )
      spids: [353 358]
    )
    (FuncDef
      name: build_binaries
      body: 
        (BraceGroup
          children: [
            (C {(cd)} {(DQ (${ VSub_Name KUBE_ROOT))})
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (build) (Lit_Other ':') (Lit_Other ':') 
                (verify_prereqs)
              }
            )
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (build) (Lit_Other ':') (Lit_Other ':') 
                (build_image)
              }
            )
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (build) (Lit_Other ':') (Lit_Other ':') 
                (run_build_command)
              } {(make)} {(Lit_VarLike 'WHAT=') (DQ ('cmd/kubectl cmd/hyperkube'))}
            )
            (C 
              {(kube) (Lit_Other ':') (Lit_Other ':') (build) (Lit_Other ':') (Lit_Other ':') 
                (copy_output)
              }
            )
          ]
          spids: [526]
        )
      spids: [520 525]
    )
    (FuncDef
      name: build_image
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:kube_version) op:Equal rhs:{(DQ )} spids:[598])]
              spids: [596]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_n
                              child: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name KUBE_VERSION>
                                      suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                                      spids: [610 613]
                                    )
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:kube_version)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name KUBE_VERSION))}
                          spids: [622]
                        )
                      ]
                      spids: [622]
                    )
                  ]
                  spids: [16777215 619]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:kube_version)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (C 
                                      {(kube) (Lit_Other ':') (Lit_Other ':') (release) (Lit_Other ':') 
                                        (Lit_Other ':') (semantic_image_tag_version)
                                      }
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [635 643]
                            )
                          )
                        }
                      spids: [633]
                    )
                  ]
                  spids: [633]
                )
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: 
                            (DBracket
                              expr: 
                                (BoolBinary
                                  op_id: BoolBinary_GlobDEqual
                                  left: {(DQ (${ VSub_Name kube_version))}
                                  right: {(Lit_Other '*') (-dirty)}
                                )
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:kube_version)
                              op: PlusEqual
                              rhs: 
                                {
                                  (DQ (.) 
                                    (CommandSubPart
                                      command_list: (CommandList children:[(C {(dirty_sha)})])
                                      left_token: <Left_CommandSub '$('>
                                      spids: [679 681]
                                    )
                                  )
                                }
                              spids: [676]
                            )
                          ]
                          spids: [676]
                        )
                      ]
                      spids: [16777215 673]
                    )
                  ]
                  spids: [16777215 685]
                )
              ]
              spids: [630 688]
            )
            (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name FEDERATION_OUTPUT_ROOT))})
            (SimpleCommand
              words: [
                {(echo)}
                {
                  (DQ ('{\n') ('  ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (KUBE_VERSION) 
                    (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (': ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name kube_version) 
                    (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('\n') ('}')
                  )
                }
              ]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: 16777215
                  arg_word: {(DQ (${ VSub_Name VERSIONS_FILE))}
                  spids: [729]
                )
              ]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {
                (DQ ('Wrote to version file ') (${ VSub_Name VERSIONS_FILE) (': ') 
                  (${ VSub_Name kube_version)
                )
              }
            )
            (SimpleCommand
              words: [
                {(make)}
                {(-C)}
                {(DQ (${ VSub_Name KUBE_ROOT) (/cluster/images/hyperkube))}
                {(build)}
              ]
              more_env: [
                (env_pair name:BASEIMAGE val:{(DQ ('ubuntu:16.04'))} spids:[759])
                (env_pair
                  name: REGISTRY
                  val: {(DQ (${ VSub_Name KUBE_REGISTRY))}
                  spids: [766]
                )
                (env_pair
                  name: VERSION
                  val: {(DQ (${ VSub_Name kube_version))}
                  spids: [775]
                )
              ]
            )
          ]
          spids: [589]
        )
      spids: [583 588]
    )
    (FuncDef
      name: get_version
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:kube_version) op:Equal rhs:{(DQ )} spids:[811])]
              spids: [809]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_n
                              child: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name KUBE_VERSION>
                                      suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                                      spids: [823 826]
                                    )
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:kube_version)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name KUBE_VERSION))}
                          spids: [835]
                        )
                      ]
                      spids: [835]
                    )
                  ]
                  spids: [16777215 832]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:kube_version)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(cat)} {(${ VSub_Name VERSIONS_FILE)})
                                        (C {(python)} {(-c)} 
                                          {
                                            (SQ <'\\\n'> <'import json, sys;\\\n'> 
                                              <'print json.load(sys.stdin)["KUBE_VERSION"]'>
                                            )
                                          }
                                        )
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [852 870]
                            )
                          )
                        }
                      spids: [850]
                    )
                  ]
                  spids: [850]
                )
              ]
              spids: [843 874]
            )
            (C {(echo)} {(DQ (${ VSub_Name kube_version))})
          ]
          spids: [806]
        )
      spids: [800 805]
    )
    (FuncDef
      name: push
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              flags: [-r]
              pairs: [
                (assign_pair
                  lhs: (LhsName name:kube_version)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: (CommandList children:[(C {(get_version)})])
                          left_token: <Left_CommandSub '$('>
                          spids: [903 905]
                        )
                      )
                    }
                  spids: [901]
                )
              ]
              spids: [897]
            )
            (C {(kube) (Lit_Other ':') (Lit_Other ':') (log) (Lit_Other ':') (Lit_Other ':') (status)} 
              {(DQ ('Pushing hyperkube image to the registry'))}
            )
            (C {(gcloud)} {(docker)} {(--)} {(push)} 
              {(DQ (${ VSub_Name KUBE_REGISTRY) ('/hyperkube-amd64:') (${ VSub_Name kube_version))}
            )
          ]
          spids: [894]
        )
      spids: [888 893]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ACTION)
          op: Equal
          rhs: 
            {
              (DQ 
                (BracedVarSub
                  token: <VSub_Number 1>
                  suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(SQ )})
                  spids: [948 951]
                )
              )
            }
          spids: [946]
        )
      ]
      spids: [944]
    )
    (Case
      to_match: {(DQ (${ VSub_Name ACTION))}
      arms: [
        (case_arm
          pat_list: [{(DQ )}]
          action: [
            (C {(echo)} 
              {
                (SQ <'Action must be one of [init, build_binaries, build_image, push, \\\n'> 
                  <
'    deploy_clusters, deploy_federation, destroy_federation, destroy_clusters \\\n'
                  > <'    redeploy_federation], \\\n'> <'    got: '>
                ) (DQ (${ VSub_Name ACTION))
              }
            )
            (C {(exit)} {(1)})
          ]
          spids: [16777215 967 990 16777215]
        )
        (case_arm
          pat_list: [{(DQ (build_binaries))}]
          action: [(C {(build_binaries)})]
          spids: [994 996 1002 16777215]
        )
        (case_arm
          pat_list: [{(DQ (build_image))}]
          action: [(C {(build_image)})]
          spids: [1006 1008 1014 16777215]
        )
        (case_arm
          pat_list: [{(DQ (push))}]
          action: [(C {(push)})]
          spids: [1018 1020 1026 16777215]
        )
        (case_arm
          pat_list: [{(DQ (init))}]
          action: [
            (Subshell
              child: (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(init)})
              spids: [1055 1068]
            )
          ]
          spids: [1050 1052 1071 16777215]
        )
        (case_arm
          pat_list: [{(DQ (deploy_clusters))}]
          action: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(export)} {(FEDERATION_OUTPUT_ROOT)})
                    (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(deploy_clusters)})
                  ]
                )
              spids: [1080 1098]
            )
          ]
          spids: [1075 1077 1101 16777215]
        )
        (case_arm
          pat_list: [{(DQ (deploy_federation))}]
          action: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(export)} {(FEDERATION_OUTPUT_ROOT)})
                    (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(deploy_federation)})
                  ]
                )
              spids: [1110 1128]
            )
          ]
          spids: [1105 1107 1131 16777215]
        )
        (case_arm
          pat_list: [{(DQ (destroy_federation))}]
          action: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(export)} {(FEDERATION_OUTPUT_ROOT)})
                    (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(destroy_federation)})
                  ]
                )
              spids: [1140 1158]
            )
          ]
          spids: [1135 1137 1161 16777215]
        )
        (case_arm
          pat_list: [{(DQ (destroy_clusters))}]
          action: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(export)} {(FEDERATION_OUTPUT_ROOT)})
                    (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(destroy_clusters)})
                  ]
                )
              spids: [1170 1188]
            )
          ]
          spids: [1165 1167 1191 16777215]
        )
        (case_arm
          pat_list: [{(DQ (redeploy_federation))}]
          action: [
            (Subshell
              child: 
                (CommandList
                  children: [
                    (C {(export)} {(FEDERATION_OUTPUT_ROOT)})
                    (C {(DQ (${ VSub_Name DEPLOY_ROOT) (/deploy.sh))} {(redeploy_federation)})
                  ]
                )
              spids: [1200 1218]
            )
          ]
          spids: [1195 1197 1221 16777215]
        )
      ]
      spids: [954 962 1223]
    )
  ]
)