(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEXTDOMAIN='> name:TEXTDOMAIN)
          op: assign_op.Equal
          rhs: {<SUNW_OST_OSCMD>}
          spids: [31]
        )
      ]
      redirects: []
    )
    (C {<export>} {<TEXTDOMAIN>})
    (command.ShFunction
      name: list_princs
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Pipeline
              children: [
                (C {<klist>} {<-k>} {($ Id.VSub_DollarName keytab)})
                (C {<tail>} {<Id.Lit_Other '+'> <4>})
                (C {<awk>} {(SQ <'{print $2}'>)})
                (C {<sort>})
                (C {<uniq>})
              ]
              negated: F
              stderr_indices: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: set_command
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<x> ($ Id.VSub_DollarName command)} 
                              {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<cmd_error>} 
                      {
                        (command_sub
                          left_token: <Id.Left_Backtick '`'>
                          child: (C {<gettext>} {(DQ <'Only one command can be specified'>)})
                          right: <Id.Backtick_Right '`'>
                        )
                      }
                    )
                    (C {<usage>})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [94 110]
                )
              ]
              else_action: []
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                  spids: [137]
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: interactive_prompt
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName interactive)} 
                              {<Id.Lit_Equals '='>} {<0>} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [174 188]
                )
              ]
              else_action: []
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PROMPT='> name:PROMPT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<gettext>} {(DQ <'%s for %s? [yes no] '>)})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [199]
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'Y1='> name:Y1)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<gettext>} {(DQ <yes>)})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [211]
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'Y2='> name:Y2)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<gettext>} {(DQ <Yes>)})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [223]
                )
              ]
              redirects: []
            )
            (C {<printf>} {(DQ ($ Id.VSub_DollarName PROMPT))} {(DQ ($ Id.VSub_Number 1))} 
              {(DQ ($ Id.VSub_Number 2))}
            )
            (C {<read>} {<ans>})
            (command.Case
              to_match: {($ Id.VSub_DollarName ans)}
              arms: [
                (case_arm
                  pat_list: [{(${ Id.VSub_Name Y1)} {(${ Id.VSub_Name Y2)}]
                  action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [262 269 277 -1]
                )
              ]
              redirects: []
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: cmd_error
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              words: [{<echo>} {($ Id.VSub_At '@')}]
              redirects: [(redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})]
              more_env: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: usage
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (C {<gettext>} 
                            {
                              (DQ <'Usage: '> ($ Id.VSub_Number 0) 
                                <' [-i] [-f file] list|change|delete|delold'>
                              )
                            }
                          )
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [317]
                )
              ]
              redirects: []
            )
            (C {<echo>} {($ Id.VSub_DollarName USAGE)})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: change_key
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<list_princs>})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [347]
                )
              ]
              redirects: []
            )
            (command.ForEach
              iter_names: [princ]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}])
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<gettext>} {(DQ <'Change key'>)})
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                          spids: [368]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} 
                                      {($ Id.VSub_DollarName princ)}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<kadmin>} {<-k>} {<-t>} {($ Id.VSub_DollarName keytab)} {<-p>} 
                              {($ Id.VSub_DollarName princ)} {<-q>} {(DQ <'ktadd -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ))}
                            )
                          ]
                          spids: [380 391]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: delete_old_keys
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<list_princs>})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [432]
                )
              ]
              redirects: []
            )
            (command.ForEach
              iter_names: [princ]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}])
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<gettext>} {(DQ <'Delete old keys'>)})
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                          spids: [453]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} 
                                      {($ Id.VSub_DollarName princ)}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<kadmin>} {<-k>} {<-t>} {($ Id.VSub_DollarName keytab)} {<-p>} 
                              {($ Id.VSub_DollarName princ)} {<-q>} {(DQ <'ktrem -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ) <' old'>)}
                            )
                          ]
                          spids: [465 476]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name: delete_keys
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'interactive='> name:interactive)
                  op: assign_op.Equal
                  rhs: {<1>}
                  spids: [518]
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: (C {<list_princs>})
                        right: <Id.Backtick_Right '`'>
                      )
                    }
                  spids: [522]
                )
              ]
              redirects: []
            )
            (command.ForEach
              iter_names: [princ]
              iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}])
              body: 
                (command.DoGroup
                  children: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<gettext>} {(DQ <'Delete all keys'>)})
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                          spids: [543]
                        )
                      ]
                      redirects: []
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} 
                                      {($ Id.VSub_DollarName princ)}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<kadmin>} {<-p>} {($ Id.VSub_DollarName princ)} {<-k>} {<-t>} 
                              {($ Id.VSub_DollarName keytab)} {<-q>} {(DQ <'ktrem -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ) <' all'>)}
                            )
                          ]
                          spids: [555 566]
                        )
                      ]
                      else_action: []
                      redirects: []
                    )
                  ]
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keytab='> name:keytab)
          op: assign_op.Equal
          rhs: {<'/etc/krb5/krb5.keytab'>}
          spids: [602]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'interactive='> name:interactive)
          op: assign_op.Equal
          rhs: {<0>}
          spids: [605]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CHANGE='> name:CHANGE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<gettext>} {(DQ <change>)})
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [609]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DELOLD='> name:DELOLD)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<gettext>} {(DQ <delold>)})
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [620]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DELETE='> name:DELETE)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<gettext>} {(DQ <delete>)})
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [631]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIST='> name:LIST)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<gettext>} {(DQ <list>)})
                right: <Id.Backtick_Right '`'>
              )
            }
          spids: [642]
        )
      ]
      redirects: []
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt='> name:opt)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                  spids: [671]
                )
              ]
              redirects: []
            )
            (C {<shift>})
            (command.Case
              to_match: {($ Id.VSub_DollarName opt)}
              arms: [
                (case_arm
                  pat_list: [{(DQ <-f>)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keytab='> name:keytab)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number 1)}
                          spids: [691]
                        )
                      ]
                      redirects: []
                    )
                    (C {<shift>})
                  ]
                  spids: [685 688 698 -1]
                )
                (case_arm
                  pat_list: [{(DQ <-i>)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'interactive='>
                              name: interactive
                            )
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [707]
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [701 704 711 -1]
                )
                (case_arm
                  pat_list: [
                    {(${ Id.VSub_Name CHANGE)}
                    {(${ Id.VSub_Name DELOLD)}
                    {(${ Id.VSub_Name DELETE)}
                    {(${ Id.VSub_Name LIST)}
                  ]
                  action: [(C {<set_command>} {($ Id.VSub_DollarName opt)})]
                  spids: [714 729 737 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ILLEGAL='> name:ILLEGAL)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: <Id.Left_Backtick '`'>
                                child: (C {<gettext>} {(DQ <'Illegal option: '>)})
                                right: <Id.Backtick_Right '`'>
                              )
                            }
                          spids: [744]
                        )
                      ]
                      redirects: []
                    )
                    (C {<cmd_error>} {($ Id.VSub_DollarName ILLEGAL)} {($ Id.VSub_DollarName opt)})
                    (C {<usage>})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [740 741 771 -1]
                )
              ]
              redirects: []
            )
          ]
        )
      redirects: []
    )
    (command.Case
      to_match: {($ Id.VSub_DollarName command)}
      arms: [
        (case_arm
          pat_list: [{($ Id.VSub_DollarName CHANGE)}]
          action: [(C {<change_key>})]
          spids: [788 789 795 -1]
        )
        (case_arm
          pat_list: [{($ Id.VSub_DollarName DELOLD)}]
          action: [(C {<delete_old_keys>})]
          spids: [798 799 805 -1]
        )
        (case_arm
          pat_list: [{($ Id.VSub_DollarName DELETE)}]
          action: [(C {<delete_keys>})]
          spids: [808 809 815 -1]
        )
        (case_arm
          pat_list: [{($ Id.VSub_DollarName LIST)}]
          action: [(C {<klist>} {<-k>} {($ Id.VSub_DollarName keytab)})]
          spids: [818 819 829 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [(C {<usage>})]
          spids: [832 833 839 -1]
        )
      ]
      redirects: []
    )
  ]
)