(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:tid)
          op: assign_op.Equal
          rhs: {(DQ <'connect with ssh.com client'>)}
          spids: [7]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ <X> (${ Id.VSub_Name TEST_COMBASE))} 
                      {<Id.Lit_Equals '='>} {(DQ <X>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<fatal>} {(SQ <'$TEST_COMBASE is not set'>)})]
          spids: [16 36]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:VERSIONS)
          op: assign_op.Equal
          rhs: 
            {
              (DQ <'\n'> <'\t2.1.0\n'> <'\t2.2.0\n'> <'\t2.3.0\n'> <'\t2.3.1\n'> <'\t2.4.0\n'> 
                <'\t3.0.0\n'> <'\t3.1.0\n'> <'\t3.2.0\n'> <'\t3.2.2\n'> <'\t3.2.3\n'> <'\t3.2.5\n'> <'\t3.2.9\n'> <'\t3.2.9.1\n'> 
                <'\t3.3.0'>
              )
            }
          spids: [48]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SRC)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<dirname>} {(${ Id.VSub_Name SCRIPT)})
              )
            }
          spids: [75]
        )
      ]
    )
    (C {<cp>} {(${ Id.VSub_Name SRC) <'/dsa_ssh2.prv'>} {(${ Id.VSub_Name OBJ) <'/id.com'>})
    (C {<chmod>} {<600>} {(${ Id.VSub_Name OBJ) <'/id.com'>})
    (command.Simple
      words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-i>} {<-f>} {(${ Id.VSub_Name OBJ) <'/id.com'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/id.openssh'>}
        )
      ]
      do_fork: T
    )
    (C {<chmod>} {<600>} {(${ Id.VSub_Name OBJ) <'/id.openssh'>})
    (command.Simple
      words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-y>} {<-f>} {(${ Id.VSub_Name OBJ) <'/id.openssh'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/authorized_keys_'> ($ Id.VSub_DollarName '$USER')}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-e>} {<-f>} {(${ Id.VSub_Name OBJ) <'/id.openssh'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/id.com.pub'>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<echo>} {<IdKey>} {(${ Id.VSub_Name OBJ) <'/id.com'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name OBJ) <'/id.list'>}
        )
      ]
      do_fork: T
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:t) op:assign_op.Equal rhs:{<dsa>} spids:[191])]
    )
    (C {<rm>} {<-f>} {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$t')} 
      {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$t') <.pub>}
    )
    (C {(${ Id.VSub_Name SSHKEYGEN)} {<-q>} {<-N>} {(SQ )} {<-t>} {($ Id.VSub_DollarName '$t')} {<-f>} 
      {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$t')}
    )
    (C {($ Id.VSub_DollarName '$SUDO')} {<cp>} 
      {($ Id.VSub_DollarName '$OBJ') <'/'> ($ Id.VSub_DollarName '$t')} {($ Id.VSub_DollarName '$OBJ') <'/host.'> ($ Id.VSub_DollarName '$t')}
    )
    (command.Simple
      words: [
        {<echo>}
        {<HostKey>}
        {($ Id.VSub_DollarName '$OBJ') <'/host.'> ($ Id.VSub_DollarName '$t')}
      ]
      redirects: [
        (redir
          op: <Id.Redir_DGreat '>>'>
          loc: (redir_loc.Fd fd:1)
          arg: {($ Id.VSub_DollarName '$OBJ') <'/sshd_config'>}
        )
      ]
      do_fork: T
    )
    (C {<mkdir>} {<-p>} {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER) <'/hostkeys'>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HK)
          op: assign_op.Equal
          rhs: 
            {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER) <'/hostkeys/key_'> 
              (${ Id.VSub_Name PORT) <_127.0.0.1>
            }
          spids: [276]
        )
      ]
    )
    (command.Simple
      words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-e>} {<-f>} {(${ Id.VSub_Name OBJ) <'/rsa.pub'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name HK) <.ssh-rsa.pub>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{(${ Id.VSub_Name SSHKEYGEN)} {<-e>} {<-f>} {(${ Id.VSub_Name OBJ) <'/dsa.pub'>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name HK) <.ssh-dss.pub>}
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name OBJ) <'/ssh2_config'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 377
              stdin_parts: [
                <'*:\n'>
                <'\tQuietMode\t\t\tyes\n'>
                <'\tStrictHostKeyChecking\t\tyes\n'>
                <'\tPort\t\t\t\t'>
                (${ Id.VSub_Name PORT)
                <'\n'>
                <'\tUser\t\t\t\t'>
                (${ Id.VSub_Name USER)
                <'\n'>
                <'\tHost\t\t\t\t127.0.0.1\n'>
                <'\tIdentityFile\t\t\t'>
                (${ Id.VSub_Name OBJ)
                <'/id.list\n'>
                <'\tRandomSeedFile\t\t\t'>
                (${ Id.VSub_Name OBJ)
                <'/random_seed\n'>
                <'        UserConfigDirectory             '>
                (${ Id.VSub_Name OBJ)
                <'/%U\n'>
                <'\tAuthenticationSuccessMsg\tno\n'>
                <'\tBatchMode\t\t\tyes\n'>
                <'\tForwardX11\t\t\tno\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<start_sshd>})
    (command.ForEach
      iter_name: v
      iter_words: [{(${ Id.VSub_Name VERSIONS)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ssh2)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name TEST_COMBASE) <'/'> (${ Id.VSub_Name v) <'/ssh2'>}
                  spids: [402]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-x>} {(${ Id.VSub_Name ssh2)} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(command.ControlFlow token:<Id.ControlFlow_Continue continue>)]
                  spids: [413 428]
                )
              ]
            )
            (C {<verbose>} {(DQ <'ssh2 '> (${ Id.VSub_Name v))})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:key)
                  op: assign_op.Equal
                  rhs: {<ssh-dss>}
                  spids: [447]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skipcat)
                  op: assign_op.Equal
                  rhs: {<0>}
                  spids: [451]
                )
              ]
            )
            (command.Case
              to_match: {($ Id.VSub_DollarName '$v')}
              arms: [
                (case_arm
                  pat_list: [{<2.1.> <Id.Lit_Star '*'>} {<2.3.0>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:skipcat)
                          op: assign_op.Equal
                          rhs: {<1>}
                          spids: [469]
                        )
                      ]
                    )
                  ]
                  spids: [462 466 473 -1]
                )
                (case_arm
                  pat_list: [{<3.0.> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:key)
                          op: assign_op.Equal
                          rhs: {<ssh-rsa>}
                          spids: [481]
                        )
                      ]
                    )
                  ]
                  spids: [476 478 485 -1]
                )
              ]
            )
            (C {<cp>} {(${ Id.VSub_Name HK) <.> ($ Id.VSub_DollarName '$key') <.pub>} 
              {(${ Id.VSub_Name HK) <.pub>}
            )
            (C {(${ Id.VSub_Name ssh2)} {<-q>} {<-F>} {(${ Id.VSub_Name OBJ) <'/ssh2_config'>} 
              {<somehost>} {<Id.ControlFlow_Exit exit>} {<42>}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:r)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [531]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$r')} {<-ne>} {<42>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<fail>} 
                      {
                        (DQ <'ssh2 '> (${ Id.VSub_Name v) <' exit code test failed (got '> 
                          ($ Id.VSub_DollarName '$r') <', expected 42)'>
                        )
                      }
                    )
                  ]
                  spids: [535 548]
                )
              ]
            )
            (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)})
            (command.Simple
              words: [
                {(${ Id.VSub_Name ssh2)}
                {<-F>}
                {(${ Id.VSub_Name OBJ) <'/ssh2_config'>}
                {<somehost>}
                {<cat>}
                {(${ Id.VSub_Name DATA)}
              ]
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(${ Id.VSub_Name COPY)}
                )
              ]
              do_fork: T
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<fail>} {(DQ <'ssh2 '> (${ Id.VSub_Name v) <' cat test (receive) failed'>)})
                  ]
                  spids: [607 620]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<cmp>} {(${ Id.VSub_Name DATA)} {(${ Id.VSub_Name COPY)})
                (C {<fail>} {(DQ <'ssh2 '> (${ Id.VSub_Name v) <' cat test (receive) data mismatch'>)})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$skipcat')} {<-eq>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)})
                    (command.Pipeline
                      children: [
                        (C {<cat>} {(${ Id.VSub_Name DATA)})
                        (C {(${ Id.VSub_Name ssh2)} {<-F>} {(${ Id.VSub_Name OBJ) <'/ssh2_config'>} 
                          {<host>} {(DQ <'cat > '> (${ Id.VSub_Name COPY))}
                        )
                      ]
                      negated: F
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} 
                                      {<Id.Lit_RBracket ']'>}
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<fail>} {(DQ <'ssh2 '> (${ Id.VSub_Name v) <' cat test (send) failed'>)})
                          ]
                          spids: [721 734]
                        )
                      ]
                    )
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<cmp>} {(${ Id.VSub_Name DATA)} {(${ Id.VSub_Name COPY)})
                        (C {<fail>} 
                          {(DQ <'ssh2 '> (${ Id.VSub_Name v) <' cat test (send) data mismatch'>)}
                        )
                      ]
                    )
                  ]
                  spids: [665 678]
                )
              ]
            )
            (C {<rm>} {<-f>} {(${ Id.VSub_Name COPY)})
            (command.Simple
              words: [
                {(${ Id.VSub_Name ssh2)}
                {<-F>}
                {(${ Id.VSub_Name OBJ) <'/ssh2_config'>}
                {<somehost>}
                {<exec>}
                {<sh>}
                {<-c>}
                {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) 
                  (DQ <'exec > /dev/null; sleep 1; echo bla 1>&2; exit 0'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>)
                }
              ]
              redirects: [(redir op:<Id.Redir_Great '2>'> loc:(redir_loc.Fd fd:2) arg:{<'/dev/null'>})]
              do_fork: T
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-ne>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<fail>} {(DQ <'ssh2 '> (${ Id.VSub_Name v) <' stderr test failed'>)})]
                  spids: [827 840]
                )
              ]
            )
          ]
        )
    )
    (C {<rm>} {<-rf>} {(${ Id.VSub_Name OBJ) <'/'> (${ Id.VSub_Name USER)})
    (command.ForEach
      iter_name: i
      iter_words: [
        {<ssh2_config>}
        {<random_seed>}
        {<dsa.pub>}
        {<dsa>}
        {<host.dsa>}
        {<id.list>}
        {<id.com>}
        {<id.com.pub>}
        {<id.openssh>}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [(C {<rm>} {<-f>} {(${ Id.VSub_Name OBJ) <'/'> ($ Id.VSub_DollarName '$i')})]
        )
    )
  ]
)