(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:doit)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name DOITPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:(word.Empty))
                )
              )
            }
          spids: [74]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:mvprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name MVPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<mv>})
                )
              )
            }
          spids: [88]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cpprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name CPPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<cp>})
                )
              )
            }
          spids: [97]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chmodprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name CHMODPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<chmod>})
                )
              )
            }
          spids: [106]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chownprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name CHOWNPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<chown>})
                )
              )
            }
          spids: [115]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chgrpprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name CHGRPPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<chgrp>})
                )
              )
            }
          spids: [124]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:stripprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name STRIPPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<strip>})
                )
              )
            }
          spids: [133]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rmprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name RMPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<rm>})
                )
              )
            }
          spids: [142]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:mkdirprog)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: <Id.VSub_Name MKDIRPROG>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_Hyphen -> arg_word:{<mkdir>})
                )
              )
            }
          spids: [151]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tranformbasename)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [161]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:transform_arg)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [165]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:instcmd)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$mvprog'))}
          spids: [169]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chmodcmd)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$chmodprog') <' 0755'>)}
          spids: [174]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chowncmd)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [180]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chgrpcmd)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [184]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:stripcmd)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [188]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:rmcmd)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$rmprog') <' -f'>)}
          spids: [192]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:mvcmd)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$mvprog'))}
          spids: [198]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:src)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [203]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dst)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [207]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dir_arg)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [211]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_Number '$1'))} 
                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{<-c>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:instcmd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$cpprog'))}
                          spids: [246]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [243 244 256 -1]
                )
                (case_arm
                  pat_list: [{<-d>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dir_arg)
                          op: assign_op.Equal
                          rhs: {<true>}
                          spids: [263]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [260 261 271 -1]
                )
                (case_arm
                  pat_list: [{<-m>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:chmodcmd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$chmodprog') <' '> ($ Id.VSub_Number '$2'))}
                          spids: [278]
                        )
                      ]
                    )
                    (C {<shift>})
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [275 276 293 -1]
                )
                (case_arm
                  pat_list: [{<-o>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:chowncmd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$chownprog') <' '> ($ Id.VSub_Number '$2'))}
                          spids: [300]
                        )
                      ]
                    )
                    (C {<shift>})
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [297 298 315 -1]
                )
                (case_arm
                  pat_list: [{<-g>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:chgrpcmd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$chgrpprog') <' '> ($ Id.VSub_Number '$2'))}
                          spids: [322]
                        )
                      ]
                    )
                    (C {<shift>})
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [319 320 337 -1]
                )
                (case_arm
                  pat_list: [{<-s>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:stripcmd)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$stripprog'))}
                          spids: [344]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [341 342 354 -1]
                )
                (case_arm
                  pat_list: [{<-t> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:transformarg)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Pipeline
                                    children: [
                                      (C {<echo>} {($ Id.VSub_Number '$1')})
                                      (C {<sed>} {(SQ <'s/-t=//'>)})
                                    ]
                                    negated: F
                                  )
                              )
                            }
                          spids: [363]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [358 361 385 -1]
                )
                (case_arm
                  pat_list: [{<-b> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:transformbasename)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: 
                                  (command.Pipeline
                                    children: [
                                      (C {<echo>} {($ Id.VSub_Number '$1')})
                                      (C {<sed>} {(SQ <'s/-b=//'>)})
                                    ]
                                    negated: F
                                  )
                              )
                            }
                          spids: [394]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [389 392 416 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$src'))} 
                                  {<Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:src)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number '$1')}
                                  spids: [442]
                                )
                              ]
                            )
                          ]
                          spids: [423 439]
                        )
                      ]
                      else_action: [
                        (C {<Id.Lit_Colon ':'>})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:dst)
                              op: assign_op.Equal
                              rhs: {($ Id.VSub_Number '$1')}
                              spids: [456]
                            )
                          ]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.ControlFlow token:<Id.ControlFlow_Continue continue>)
                  ]
                  spids: [420 421 467 -1]
                )
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$src'))} 
                  {<Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'install:\tno input file specified'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [475 490]
        )
      ]
      else_action: [(C {<true>})]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$dir_arg'))} 
                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dst)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$src')}
                  spids: [532]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:src)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                  spids: [536]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName '$dst')} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:instcmd)
                          op: assign_op.Equal
                          rhs: {<Id.Lit_Colon ':'>}
                          spids: [557]
                        )
                      ]
                    )
                  ]
                  spids: [543 554]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:instcmd)
                      op: assign_op.Equal
                      rhs: {<mkdir>}
                      spids: [564]
                    )
                  ]
                )
              ]
            )
          ]
          spids: [512 529]
        )
      ]
      else_action: [
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName '$src')} {<-o>} {<-d>} 
                      {($ Id.VSub_DollarName '$src')} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [(C {<true>})]
              spids: [584 601]
            )
          ]
          else_action: [
            (C {<echo>} {(DQ <'install:  '> ($ Id.VSub_DollarName '$src') <' does not exist'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$dst'))} 
                      {<Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [
                (C {<echo>} {(DQ <'install:\tno destination specified'>)})
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
              spids: [629 645]
            )
          ]
          else_action: [(C {<true>})]
        )
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName '$dst')} 
                      {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dst)
                      op: assign_op.Equal
                      rhs: 
                        {(DQ ($ Id.VSub_DollarName '$dst')) <'/'> 
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            child: (C {<basename>} {($ Id.VSub_DollarName '$src')})
                          )
                        }
                      spids: [691]
                    )
                  ]
                )
              ]
              spids: [677 688]
            )
          ]
          else_action: [(C {<true>})]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:dstdir)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Pipeline
                    children: [
                      (C {<echo>} {($ Id.VSub_DollarName '$dst')})
                      (C {<sed>} {<-e>} {(SQ <'s,[^/]*$,,;s,/$,,;s,^$,.,'>)})
                    ]
                    negated: F
                  )
              )
            }
          spids: [719]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} 
                      {(DQ ($ Id.VSub_DollarName '$dstdir'))} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:defaultIFS)
                  op: assign_op.Equal
                  rhs: {(SQ <'\t\n'>)}
                  spids: [766]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (braced_var_sub
                          token: <Id.VSub_Name IFS>
                          suffix_op: 
                            (suffix_op.Unary
                              tok: <Id.VTest_Hyphen ->
                              arg_word: {(${ Id.VSub_Name defaultIFS)}
                            )
                        )
                      )
                    }
                  spids: [771]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:oIFS)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name IFS))}
                  spids: [783]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: {(SQ <'%'>)}
                  spids: [793]
                )
              ]
            )
            (C {<set>} {<->} 
              {
                (command_sub
                  left_token: <Id.Left_Backtick '`'>
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<echo>} {(${ Id.VSub_Name dstdir)})
                        (C {<sed>} {<-e>} {(SQ <'s@/@%@g'>)} {<-e>} {(SQ <'s@^%@/@'>)})
                      ]
                      negated: F
                    )
                )
              }
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:IFS)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name oIFS))}
                  spids: [828]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:pathcomp)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [836]
                )
              ]
            )
            (command.WhileUntil
              keyword: <Id.KW_While while>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<0>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:pathcomp)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name pathcomp) (${ Id.VSub_Number 1))}
                          spids: [858]
                        )
                      ]
                    )
                    (C {<shift>})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-d>} 
                                      {(DQ (${ Id.VSub_Name pathcomp))} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {($ Id.VSub_DollarName '$mkdirprog')} {(DQ (${ Id.VSub_Name pathcomp))})
                          ]
                          spids: [873 892]
                        )
                      ]
                      else_action: [(C {<true>})]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:pathcomp)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name pathcomp) <'/'>)}
                          spids: [914]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
          spids: [749 764]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.If
          arms: [
            (if_arm
              cond: 
                (condition.Shell
                  commands: [
                    (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$dir_arg'))} 
                      {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                )
              action: [
                (command.AndOr
                  ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                  children: [
                    (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$instcmd')} 
                      {($ Id.VSub_DollarName '$dst')}
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} 
                                      {<x> (DQ ($ Id.VSub_DollarName '$chowncmd'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.Sentence
                              child: 
                                (C {($ Id.VSub_DollarName '$doit')} 
                                  {($ Id.VSub_DollarName '$chowncmd')} {($ Id.VSub_DollarName '$dst')}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          spids: [956 973]
                        )
                      ]
                      else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} 
                                      {<x> (DQ ($ Id.VSub_DollarName '$chgrpcmd'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.Sentence
                              child: 
                                (C {($ Id.VSub_DollarName '$doit')} 
                                  {($ Id.VSub_DollarName '$chgrpcmd')} {($ Id.VSub_DollarName '$dst')}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          spids: [993 1010]
                        )
                      ]
                      else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} 
                                      {<x> (DQ ($ Id.VSub_DollarName '$stripcmd'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.Sentence
                              child: 
                                (C {($ Id.VSub_DollarName '$doit')} 
                                  {($ Id.VSub_DollarName '$stripcmd')} {($ Id.VSub_DollarName '$dst')}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          spids: [1030 1047]
                        )
                      ]
                      else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} 
                                      {<x> (DQ ($ Id.VSub_DollarName '$chmodcmd'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.Sentence
                              child: 
                                (C {($ Id.VSub_DollarName '$doit')} 
                                  {($ Id.VSub_DollarName '$chmodcmd')} {($ Id.VSub_DollarName '$dst')}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                          spids: [1067 1084]
                        )
                      ]
                      else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                    )
                  ]
                )
              ]
              spids: [927 943]
            )
          ]
          else_action: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$transformarg'))} 
                          {<Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dstfile)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<basename>} {($ Id.VSub_DollarName '$dst')})
                              )
                            }
                          spids: [1129]
                        )
                      ]
                    )
                  ]
                  spids: [1109 1126]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:dstfile)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            child: 
                              (command.Pipeline
                                children: [
                                  (C {<basename>} {($ Id.VSub_DollarName '$dst')} 
                                    {($ Id.VSub_DollarName '$transformbasename')}
                                  )
                                  (C {<sed>} {($ Id.VSub_DollarName '$transformarg')})
                                ]
                                negated: F
                              )
                          ) ($ Id.VSub_DollarName '$transformbasename')
                        }
                      spids: [1142]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$dstfile'))} 
                          {<Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:dstfile)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<basename>} {($ Id.VSub_DollarName '$dst')})
                              )
                            }
                          spids: [1192]
                        )
                      ]
                    )
                  ]
                  spids: [1172 1189]
                )
              ]
              else_action: [(C {<true>})]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:dsttmp)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$dstdir') <'/'> <Id.Lit_Pound '#'> <inst.> 
                      ($ Id.VSub_Dollar '$$') <Id.Lit_Pound '#'>
                    }
                  spids: [1216]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$instcmd')} 
                  {($ Id.VSub_DollarName '$src')} {($ Id.VSub_DollarName '$dsttmp')}
                )
                (C {<trap>} {(DQ <'rm -f '> (${ Id.VSub_Name dsttmp))} {<0>})
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$chowncmd'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.Sentence
                          child: 
                            (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$chowncmd')} 
                              {($ Id.VSub_DollarName '$dsttmp')}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      spids: [1271 1288]
                    )
                  ]
                  else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$chgrpcmd'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.Sentence
                          child: 
                            (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$chgrpcmd')} 
                              {($ Id.VSub_DollarName '$dsttmp')}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      spids: [1306 1323]
                    )
                  ]
                  else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$stripcmd'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.Sentence
                          child: 
                            (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$stripcmd')} 
                              {($ Id.VSub_DollarName '$dsttmp')}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      spids: [1341 1358]
                    )
                  ]
                  else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {<x> (DQ ($ Id.VSub_DollarName '$chmodcmd'))} 
                                  {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.Sentence
                          child: 
                            (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$chmodcmd')} 
                              {($ Id.VSub_DollarName '$dsttmp')}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                      spids: [1376 1393]
                    )
                  ]
                  else_action: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)]
                )
                (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$rmcmd')} {<-f>} 
                  {($ Id.VSub_DollarName '$dstdir') <'/'> ($ Id.VSub_DollarName '$dstfile')}
                )
                (C {($ Id.VSub_DollarName '$doit')} {($ Id.VSub_DollarName '$mvcmd')} 
                  {($ Id.VSub_DollarName '$dsttmp')} {($ Id.VSub_DollarName '$dstdir') <'/'> ($ Id.VSub_DollarName '$dstfile')}
                )
              ]
            )
          ]
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
      ]
    )
  ]
)