(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ATJOBDIR)
          op: assign_op.Equal
          rhs: {(DQ (/var/at/jobs))}
          spids: [85]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CRONJOBDIR)
          op: assign_op.Equal
          rhs: {(DQ (/var/cron/tabs))}
          spids: [90]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MAILSPOOL)
          op: assign_op.Equal
          rhs: {(DQ (/var/mail))}
          spids: [95]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SIGKILL)
          op: assign_op.Equal
          rhs: {(DQ (-KILL))}
          spids: [100]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEMPDIRS)
          op: assign_op.Equal
          rhs: {(DQ ('/tmp /var/tmp'))}
          spids: [105]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:THISCMD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:111)
                command_list: 
                  (command.CommandList
                    children: [(C {(/usr/bin/basename)} {($ Id.VSub_Number '$0')})]
                  )
              )
            }
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PWCMD)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (braced_var_sub
                  token: (Token id:Id.VSub_Name val:PWCMD span_id:122)
                  suffix_op: 
                    (suffix_op.Unary
                      op_id: Id.VTest_ColonHyphen
                      arg_word: {(Id.Lit_Slash /) (usr) (Id.Lit_Slash /) (sbin) (Id.Lit_Slash /) (pw)}
                    )
                )
              )
            }
          spids: [119]
        )
      ]
    )
    (command.ShFunction
      name: err
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(echo)} {(${ Id.VSub_Name THISCMD) (Id.Lit_Other ':')} {($ Id.VSub_Star '$*')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:152)
                  fd: 1
                  arg_word: {(2)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: verbose
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$vflag'))} 
                  {(Id.Lit_RBracket ']')}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:193)
                  arg_word: {(0)}
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:199)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_files
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [239]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:244)
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:totalcount)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [248]
                )
              ]
            )
            (command.ForEach
              iter_name: _dir
              iter_words: [{(${ Id.VSub_Name TEMPDIRS)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:filecount)
                          op: assign_op.Equal
                          rhs: {(0)}
                          spids: [267]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-d)} 
                                  {($ Id.VSub_DollarName '$_dir')} {(Id.Lit_RBracket ']')}
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:282)
                            )
                          ]
                          action: [
                            (C {(err)} 
                              {(DQ ($ Id.VSub_DollarName '$_dir') (' is not a valid directory.'))}
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Continue val:continue span_id:295)
                            )
                          ]
                          spids: [271 284]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {
                            (DQ ('Removing files owned by (') ($ Id.VSub_DollarName '$login') (') in ') 
                              ($ Id.VSub_DollarName '$_dir') (':')
                            )
                          }
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:filecount)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:319)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (command.Simple
                                            words: [
                                              {(find)}
                                              {(DQ ($ Id.VSub_DollarName '$_dir'))}
                                              {(-user)}
                                              {(DQ ($ Id.VSub_DollarName '$login'))}
                                              {(-delete)}
                                              {(-print)}
                                            ]
                                            redirects: [
                                              (redir.Redir
                                                op: (Token id:Id.Redir_Great val:'2>' span_id:325)
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                              )
                                            ]
                                          )
                                          (C {(wc)} {(-l)})
                                          (C {(sed)} 
                                            {(SQ (Token id:Id.Lit_Chars val:'s/ *//' span_id:354))}
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [318]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(DQ (' ') ($ Id.VSub_DollarName '$filecount') (' removed.'))})
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:totalcount)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: 
                                      (arith_expr.ArithWord
                                        w: {($ Id.VSub_DollarName '$totalcount')}
                                      )
                                    right: 
                                      (arith_expr.ArithWord
                                        w: {($ Id.VSub_DollarName '$filecount')}
                                      )
                                  )
                              )
                            }
                          spids: [372]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$totalcount')} {(-ne)} {(0)} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(echo)} {(-n)} {(DQ (' files(') ($ Id.VSub_DollarName '$totalcount') (')'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_mail
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [450]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:455)
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {(DQ ('Removing mail spool(s) for (') ($ Id.VSub_DollarName '$login') ('):'))}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name MAILSPOOL) (/) ($ Id.VSub_DollarName '$login')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:487)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {(DQ (' ') (${ Id.VSub_Name MAILSPOOL) (/) ($ Id.VSub_DollarName '$login'))}
                        )
                        (C {(echo)} {(-n)} {(DQ (' mailspool'))})
                      ]
                    )
                    (C {(rm)} {(${ Id.VSub_Name MAILSPOOL) (/) ($ Id.VSub_DollarName '$login')})
                  ]
                  spids: [474 489]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name MAILSPOOL) (/.) (${ Id.VSub_Name login) (.pop)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:549)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {(DQ (' ') (${ Id.VSub_Name MAILSPOOL) (/.) (${ Id.VSub_Name login) (.pop))}
                        )
                        (C {(echo)} {(-n)} {(DQ (' pop3'))})
                      ]
                    )
                    (C {(rm)} {(${ Id.VSub_Name MAILSPOOL) (/.) (${ Id.VSub_Name login) (.pop)})
                  ]
                  spids: [533 551]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:. span_id:608))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: kill_procs
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [644]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:649)
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {
                    (DQ ('Terminating all processes owned by (') ($ Id.VSub_DollarName '$login') ('):'))
                  }
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:killcount)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [668]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:proclist)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:673)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (command.Simple
                                    words: [{(ps)} {(-U)} {($ Id.VSub_DollarName '$login')}]
                                    redirects: [
                                      (redir.Redir
                                        op: (Token id:Id.Redir_Great val:'2>' span_id:680)
                                        fd: 2
                                        arg_word: {(/dev/null)}
                                      )
                                    ]
                                  )
                                  (C {(grep)} {(-v)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'^\\ *PID' span_id:694))}
                                  )
                                  (C {(awk)} {(SQ (Token id:Id.Lit_Chars val:'{print $1}' span_id:702))})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [672]
                )
              ]
            )
            (command.ForEach
              iter_name: _pid
              iter_words: [{($ Id.VSub_DollarName '$proclist')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Simple
                      words: [{(kill)} {(${ Id.VSub_Name SIGKILL)} {($ Id.VSub_DollarName '$_pid')}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'2>' span_id:722)
                          fd: 2
                          arg_word: {(/dev/null)}
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:killcount)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: 
                                      (arith_expr.ArithWord
                                        w: {($ Id.VSub_DollarName '$killcount')}
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [732]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} 
                  {
                    (DQ (' ') (${ Id.VSub_Name SIGKILL) (' signal sent to ') 
                      ($ Id.VSub_DollarName '$killcount') (' processes.')
                    )
                  }
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$killcount')} {(-ne)} {(0)} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(echo)} {(-n)} {(DQ (' processes(') (${ Id.VSub_Name killcount) (')'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_at_jobs
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [826]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:831)
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:atjoblist)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:836)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [
                                  {(find)}
                                  {(${ Id.VSub_Name ATJOBDIR)}
                                  {(-maxdepth)}
                                  {(1)}
                                  {(-user)}
                                  {($ Id.VSub_DollarName '$login')}
                                  {(-print)}
                                ]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Great val:'2>' span_id:841)
                                    fd: 2
                                    arg_word: {(/dev/null)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [835]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:jobcount)
                  op: assign_op.Equal
                  rhs: {(0)}
                  spids: [860]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {(DQ ('Removing at(1) jobs owned by (') ($ Id.VSub_DollarName '$login') ('):'))}
                )
              ]
            )
            (command.ForEach
              iter_name: _atjob
              iter_words: [{($ Id.VSub_DollarName '$atjoblist')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$_atjob')})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:jobcount)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Plus
                                    left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$jobcount')})
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                  )
                              )
                            }
                          spids: [899]
                        )
                      ]
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(DQ (' ') ($ Id.VSub_DollarName '$jobcount') (' removed.'))})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Pipeline children:[(C {(verbose)})] negated:T)
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$jobcount')} {(-ne)} {(0)} 
                  {(Id.Lit_RBracket ']')}
                )
                (C {(echo)} {(-n)} {(DQ (' at(') ($ Id.VSub_DollarName '$jobcount') (')'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_crontab
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [987]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:992)
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} 
                  {(DQ ('Removing crontab for (') ($ Id.VSub_DollarName '$login') ('):'))}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-f)} 
                          {(${ Id.VSub_Name CRONJOBDIR) (/) ($ Id.VSub_DollarName '$login')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1024)
                    )
                  ]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DPipe]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} 
                          {
                            (DQ (' ') (${ Id.VSub_Name CRONJOBDIR) (/) ($ Id.VSub_DollarName '$login'))
                          }
                        )
                        (C {(echo)} {(-n)} {(DQ (' crontab'))})
                      ]
                    )
                    (C {(rm)} {(-f)} {(${ Id.VSub_Name CRONJOBDIR) (/) ($ Id.VSub_DollarName '$login')})
                  ]
                  spids: [1011 1026]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:. span_id:1078))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_ipc
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing IPC mechanisms'))})]
            )
            (command.ForEach
              iter_name: i
              iter_words: [{(s)} {(m)} {(q)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.Pipeline
                      children: [
                        (C {(ipcs)} {(-) ($ Id.VSub_DollarName '$i')})
                        (C {(awk)} {(-v)} {(Id.Lit_VarLike 'i=') ($ Id.VSub_DollarName '$i')} {(-v)} 
                          {(Id.Lit_VarLike 'login=') ($ Id.VSub_Number '$1')} {(SQ (Token id:Id.Lit_Chars val:'$1 == i && $5 == login { print $2 }' span_id:1150))}
                        )
                        (C {(xargs)} {(-n)} {(1)} {(ipcrm)} {(-) ($ Id.VSub_DollarName '$i')})
                      ]
                      negated: F
                    )
                  ]
                )
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:. span_id:1178))})]
            )
          ]
        )
    )
    (command.ShFunction
      name: rm_user
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:login)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [1232]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1237)
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ Id.VSub_DollarName '$login') (')'))})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$pw_rswitch'))} 
                  {(Id.Lit_RBracket ']')}
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(verbose)})
                        (C {(echo)} {(-n)} {(DQ (' (including home directory)'))})
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.Pipeline
                          children: [(C {(verbose)})]
                          negated: T
                        )
                        (C {(echo)} {(-n)} {(DQ (' home'))})
                      ]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Pipeline children:[(C {(verbose)})] negated:T)
                (C {(echo)} {(-n)} {(DQ (' passwd'))})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' from the system:'))})]
            )
            (C {(${ Id.VSub_Name PWCMD)} {(userdel)} {(-n)} {($ Id.VSub_DollarName '$login')} 
              {($ Id.VSub_DollarName '$pw_rswitch')}
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(verbose)})
                (C {(echo)} {(SQ (Token id:Id.Lit_Chars val:' Done.' span_id:1350))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: prompt_yesno
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DPipe]
              children: [
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_RBracket ']')})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:msg)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [1394]
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:1401)
                )
              ]
            )
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:1405)
              cond: [
                (command.Sentence
                  child: (C {(Id.Lit_Other ':')})
                  terminator: (Token id:Id.Op_Semi val:';' span_id:1409)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$msg'))})
                    (C {(read)} {(_ans)})
                    (command.Case
                      to_match: {($ Id.VSub_DollarName '$_ans')}
                      arms: [
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) 
                              (Id.Lit_RBracket ']')
                            }
                            {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')}
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1448)
                              arg_word: {(1)}
                            )
                          ]
                          spids: [1435 1445 1453 -1]
                        )
                        (case_arm
                          pat_list: [
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']')
                            }
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) 
                              (Id.Lit_RBracket ']')
                            }
                            {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')}
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:1479)
                              arg_word: {(0)}
                            )
                          ]
                          spids: [1456 1476 1484 -1]
                        )
                        (case_arm
                          pat_list: [{(Id.Lit_Star '*')}]
                          spids: [1487 1488 1491 -1]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: show_usage
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('usage: ') (${ Id.VSub_Name THISCMD) (' [-yv] [-f file] [user ...]'))})
            (C {(echo)} {(DQ ('       if the -y switch is used, either the -f switch or'))})
            (C {(echo)} {(DQ ('       one or more user names must be given'))})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ffile)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1552]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:fflag)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1554]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:procowner)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1556]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:pw_rswitch)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1558]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:userlist)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1560]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:yflag)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1562]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:vflag)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [1564]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:procowner)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:1568)
                command_list: (command.CommandList children:[(C {(/usr/bin/id)} {(-u)})])
              )
            }
          spids: [1567]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$procowner'))} 
                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1592)
            )
          ]
          action: [
            (C {(err)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'you must be root (0) to use this utility.'
                    span_id: 1600
                  )
                )
              }
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:1604)
              arg_word: {(1)}
            )
          ]
          spids: [1576 1594]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:args)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:1612)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [{(getopt)} {(yvf) (Id.Lit_Other ':')} {($ Id.VSub_Star '$*')}]
                        redirects: [
                          (redir.Redir
                            op: (Token id:Id.Redir_Great val:'2>' span_id:1617)
                            fd: 2
                            arg_word: {(/dev/null)}
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [1611]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_QMark '$?'))} 
                  {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1642)
            )
          ]
          action: [
            (C {(show_usage)})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:1650)
              arg_word: {(1)}
            )
          ]
          spids: [1626 1644]
        )
      ]
    )
    (C {(Id.KW_Set set)} {(--)} {($ Id.VSub_DollarName '$args')})
    (command.ForEach
      iter_name: _switch
      do_arg_iter: T
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_DollarName '$_switch')}
              arms: [
                (case_arm
                  pat_list: [{(-y)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:yflag)
                          op: assign_op.Equal
                          rhs: {(1)}
                          spids: [1682]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                  spids: [1678 1679 1689 -1]
                )
                (case_arm
                  pat_list: [{(-v)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:vflag)
                          op: assign_op.Equal
                          rhs: {(1)}
                          spids: [1696]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                  spids: [1692 1693 1703 -1]
                )
                (case_arm
                  pat_list: [{(-f)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:fflag)
                          op: assign_op.Equal
                          rhs: {(1)}
                          spids: [1710]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:ffile)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number '$2'))}
                          spids: [1714]
                        )
                      ]
                    )
                    (command.Sentence
                      child: (C {(shift)})
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1721)
                    )
                    (C {(shift)})
                  ]
                  spids: [1706 1707 1726 -1]
                )
                (case_arm
                  pat_list: [{(--)}]
                  action: [
                    (C {(shift)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Break val:break span_id:1736)
                    )
                  ]
                  spids: [1729 1730 1739 -1]
                )
              ]
            )
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$fflag')} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1766)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_insecure)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:1772)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(find)} {($ Id.VSub_DollarName '$ffile')} {(Id.KW_Bang '!')} {(-user)} 
                                {(0)} {(-or)} {(-perm)} {(Id.Lit_Other '+') (0022)}
                              )
                            ]
                          )
                      )
                    }
                  spids: [1771]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_insecure'))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1805)
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('file (') ($ Id.VSub_DollarName '$ffile') 
                          (') must be owned by and writeable only by root.')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:1819)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1794 1807]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-r)} {(DQ ($ Id.VSub_DollarName '$ffile'))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1838)
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:userlist)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:1844)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(cat)} {($ Id.VSub_DollarName '$ffile')})
                                          (command.WhileUntil
                                            keyword: (Token id:Id.KW_While val:while span_id:1863)
                                            cond: [
                                              (command.Sentence
                                                child: (C {(read)} {(_user)} {(_junk)})
                                                terminator: 
                                                  (Token
                                                    id: Id.Op_Semi
                                                    val: ';'
                                                    span_id: 1871
                                                  )
                                              )
                                            ]
                                            body: 
                                              (command.DoGroup
                                                children: [
                                                  (command.Case
                                                    to_match: {($ Id.VSub_DollarName '$_user')}
                                                    arms: [
                                                      (case_arm
                                                        pat_list: [
                                                          {
                                                            (word_part.EscapedLiteral
                                                              token: 
                                                                (Token
                                                                  id: Id.Lit_EscapedChar
                                                                  val: '\\#'
                                                                  span_id: 1883
                                                                )
                                                            ) (Id.Lit_Star '*')
                                                          }
                                                          {(SQ )}
                                                        ]
                                                        spids: [1883 1888 1891 -1]
                                                      )
                                                      (case_arm
                                                        pat_list: [{(Id.Lit_Star '*')}]
                                                        action: [
                                                          (C {(echo)} {(-n)} 
                                                            {
                                                              (DQ ($ Id.VSub_DollarName '$userlist') 
                                                                (' ') ($ Id.VSub_DollarName '$_user')
                                                              )
                                                            }
                                                          )
                                                        ]
                                                        spids: [1894 1895 1909 -1]
                                                      )
                                                    ]
                                                  )
                                                ]
                                              )
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [1843]
                        )
                      ]
                    )
                  ]
                  spids: [1827 1840]
                )
              ]
            )
          ]
          spids: [1759 1768]
        )
      ]
      else_action: [
        (command.WhileUntil
          keyword: (Token id:Id.KW_While val:while span_id:1924)
          cond: [
            (command.Sentence
              child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Number '$1')} {(Id.Lit_RBracket ']')})
              terminator: (Token id:Id.Op_Semi val:';' span_id:1932)
            )
          ]
          body: 
            (command.DoGroup
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:userlist)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_DollarName '$userlist') (' ') ($ Id.VSub_Number '$1'))}
                      spids: [1937]
                    )
                  ]
                )
                (C {(shift)})
              ]
            )
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(DQ ($ Id.VSub_DollarName '$userlist'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1976)
            )
          ]
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$fflag')} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:1988)
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('(') ($ Id.VSub_DollarName '$ffile') 
                          (') does not exist or does not contain any user names.')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:2002)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [1981 1990]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$yflag')} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2014)
                    )
                  ]
                  action: [
                    (C {(show_usage)})
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:2022)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [2007 2016]
                )
              ]
              else_action: [
                (C {(echo)} {(-n)} {(DQ ('Please enter one or more usernames: '))})
                (C {(read)} {(userlist)})
              ]
            )
          ]
          spids: [1965 1978]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_user)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [2049]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:_uid)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [2051]
        )
      ]
    )
    (command.ForEach
      iter_name: _user
      iter_words: [{($ Id.VSub_DollarName '$userlist')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:userrec)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:2079)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Simple
                                words: [{(pw)} {(usershow)} {(-n)} {($ Id.VSub_DollarName '$_user')}]
                                redirects: [
                                  (redir.Redir
                                    op: (Token id:Id.Redir_Great val:'2>' span_id:2084)
                                    fd: 2
                                    arg_word: {(/dev/null)}
                                  )
                                ]
                              )
                            ]
                          )
                      )
                    }
                  spids: [2078]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_QMark '$?'))} 
                          {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2111)
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('user (') ($ Id.VSub_DollarName '$_user') 
                          (') does not exist in the password database.')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:2125)
                    )
                  ]
                  spids: [2095 2113]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_uid)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:2132)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {($ Id.VSub_DollarName '$userrec')})
                                  (C {(awk)} {(-F) (Id.Lit_Other ':')} 
                                    {(SQ (Token id:Id.Lit_Chars val:'{print $3}' span_id:2147))}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [2131]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_uid'))} 
                          {(Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2167)
                    )
                  ]
                  action: [
                    (C {(err)} 
                      {
                        (DQ ('user (') ($ Id.VSub_DollarName '$_user') 
                          (') has uid 0. You may not remove this user.')
                        )
                      }
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:2181)
                    )
                  ]
                  spids: [2152 2169]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$yflag'))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:2211)
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('Matching password entry:'))})
                    (C {(echo)})
                    (C {(echo)} {($ Id.VSub_DollarName '$userrec')})
                    (C {(echo)})
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (command.Pipeline
                                  children: [
                                    (C {(prompt_yesno)} 
                                      {(DQ ('Is this the entry you wish to remove? '))}
                                    )
                                  ]
                                  negated: T
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2244)
                            )
                          ]
                          action: [
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Continue val:continue span_id:2249)
                            )
                          ]
                          spids: [2234 2246]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:_homedir)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_Backtick val:'`' span_id:2256)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (command.Pipeline
                                        children: [
                                          (C {(echo)} {($ Id.VSub_DollarName '$userrec')})
                                          (C {(awk)} {(-F) (Id.Lit_Other ':')} 
                                            {
                                              (SQ 
                                                (Token
                                                  id: Id.Lit_Chars
                                                  val: '{print $9}'
                                                  span_id: 2271
                                                )
                                              )
                                            }
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [2255]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: [
                            (command.Sentence
                              child: 
                                (C {(prompt_yesno)} 
                                  {
                                    (DQ ("Remove user's home directory (") 
                                      ($ Id.VSub_DollarName '$_homedir') (')? ')
                                    )
                                  }
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:2285)
                            )
                          ]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:pw_rswitch)
                                  op: assign_op.Equal
                                  rhs: {(DQ (-r))}
                                  spids: [2290]
                                )
                              ]
                            )
                          ]
                          spids: [2276 2287]
                        )
                      ]
                    )
                  ]
                  spids: [2200 2213]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:pw_rswitch)
                      op: assign_op.Equal
                      rhs: {(DQ (-r))}
                      spids: [2302]
                    )
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(${ Id.VSub_Name PWCMD)} {(lock)} {($ Id.VSub_DollarName '$_user')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'2>' span_id:2320)
                  fd: 2
                  arg_word: {(/dev/null)}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Pipeline children:[(C {(verbose)})] negated:T)
                (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ Id.VSub_DollarName '$_user') ('):'))})
              ]
            )
            (C {(rm_crontab)} {($ Id.VSub_DollarName '$_user')})
            (C {(rm_at_jobs)} {($ Id.VSub_DollarName '$_user')})
            (C {(rm_ipc)} {($ Id.VSub_DollarName '$_user')})
            (C {(kill_procs)} {($ Id.VSub_DollarName '$_user')})
            (C {(rm_files)} {($ Id.VSub_DollarName '$_user')})
            (C {(rm_mail)} {($ Id.VSub_DollarName '$_user')})
            (C {(rm_user)} {($ Id.VSub_DollarName '$_user')})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(command.Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(DQ (.))})]
            )
          ]
        )
    )
  ]
)