(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'class='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'class='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'class='> name:class)
          op: assign_op.Equal
          rhs: {(DQ <eli>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'base='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'base='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'base='> name:base)
          op: assign_op.Equal
          rhs: 
            {
              (CommandSub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Simple
                    blame_tok: <basename>
                    more_env: []
                    words: [{<basename>} {($ Id.VSub_Number 0)}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'no='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'no='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'no='> name:no)
          op: assign_op.Equal
          rhs: {<0>}
        )
      ]
      redirects: []
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <Id.Lit_LBracket '['>
                  more_env: []
                  words: [
                    {<Id.Lit_LBracket '['>}
                    {<-c>}
                    {<'/dev/md'> ($ Id.VSub_DollarName no)}
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Simple
              blame_tok: <Id.Lit_Colon ':'>
              more_env: []
              words: [
                {<Id.Lit_Colon ':'>}
                {
                  (word_part.ArithSub
                    left: <Id.Left_DollarDParen '$(('>
                    anode: 
                      (arith_expr.BinaryAssign
                        op_id: Id.Arith_PlusEqual
                        left: ($ Id.Lit_ArithVarLike no)
                        right: {<Id.Lit_Digits 1>}
                      )
                    right: <Id.Right_DollarDParen _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.ShFunction
      name_tok: <for_each_geli_config>
      name: for_each_geli_config
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'func='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'func='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'func='> name:func)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [cipher]
              iterable: 
                (for_iter.Words
                  words: [
                    {<aes-xts> <Id.Lit_Colon ':'> <128>}
                    {<aes-xts> <Id.Lit_Colon ':'> <256>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <128>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <192>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <256>}
                    {<3des-cbc> <Id.Lit_Colon ':'> <192>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <128>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <160>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <192>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <224>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <256>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <288>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <320>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <352>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <384>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <416>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <448>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <128>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <192>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <256>}
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'ealgo='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'ealgo='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ealgo='> name:ealgo)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name cipher>
                                var_name: cipher
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VOp1_DPercent '%%'>
                                    arg_word: {<':'> <Id.Lit_Other '*'>}
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'keylen='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'keylen='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keylen='> name:keylen)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name cipher>
                                var_name: cipher
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VOp1_DPound '##'>
                                    arg_word: {<Id.Lit_Other '*'> <':'>}
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [aalgo]
                      iterable: 
                        (for_iter.Words
                          words: [
                            {<'hmac/md5'>}
                            {<'hmac/sha1'>}
                            {<'hmac/ripemd160'>}
                            {<'hmac/sha256'>}
                            {<'hmac/sha384'>}
                            {<'hmac/sha512'>}
                          ]
                        )
                      semi_tok: <Id.Op_Semi _>
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.ForEach
                              keyword: <Id.KW_For for>
                              iter_names: [secsize]
                              iterable: 
                                (for_iter.Words
                                  words: [{<512>} {<1024>} {<2048>} {<4096>} {<8192>}]
                                )
                              semi_tok: <Id.Op_Semi _>
                              body: 
                                (command.DoGroup
                                  left: <Id.KW_Do do>
                                  children: [
                                    (command.Simple
                                      blame_tok: <Id.Left_DollarBrace '${'>
                                      more_env: []
                                      words: [
                                        {(${ Id.VSub_Name func)}
                                        {($ Id.VSub_DollarName cipher)}
                                        {($ Id.VSub_DollarName aalgo)}
                                        {($ Id.VSub_DollarName secsize)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  ]
                                  right: <Id.KW_Done done>
                                )
                              redirects: []
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <for_each_geli_config_nointegrity>
      name: for_each_geli_config_nointegrity
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'func='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'func='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'func='> name:func)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number 1)}
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [cipher]
              iterable: 
                (for_iter.Words
                  words: [
                    {<aes-xts> <Id.Lit_Colon ':'> <128>}
                    {<aes-xts> <Id.Lit_Colon ':'> <256>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <128>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <192>}
                    {<aes-cbc> <Id.Lit_Colon ':'> <256>}
                    {<3des-cbc> <Id.Lit_Colon ':'> <192>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <128>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <160>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <192>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <224>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <256>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <288>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <320>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <352>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <384>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <416>}
                    {<blowfish-cbc> <Id.Lit_Colon ':'> <448>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <128>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <192>}
                    {<camellia-cbc> <Id.Lit_Colon ':'> <256>}
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'ealgo='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'ealgo='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ealgo='> name:ealgo)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name cipher>
                                var_name: cipher
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VOp1_DPercent '%%'>
                                    arg_word: {<':'> <Id.Lit_Other '*'>}
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'keylen='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'keylen='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keylen='> name:keylen)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name cipher>
                                var_name: cipher
                                suffix_op: 
                                  (suffix_op.Unary
                                    op: <Id.VOp1_DPound '##'>
                                    arg_word: {<Id.Lit_Other '*'> <':'>}
                                  )
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [secsize]
                      iterable: (for_iter.Words words:[{<512>} {<1024>} {<2048>} {<4096>} {<8192>}])
                      semi_tok: <Id.Op_Semi _>
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.Simple
                              blame_tok: <Id.Left_DollarBrace '${'>
                              more_env: []
                              words: [
                                {(${ Id.VSub_Name func)}
                                {($ Id.VSub_DollarName cipher)}
                                {($ Id.VSub_DollarName aalgo)}
                                {($ Id.VSub_DollarName secsize)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <geli_test_cleanup>
      name: geli_test_cleanup
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <Id.Lit_LBracket '['>
                  more_env: []
                  words: [
                    {<Id.Lit_LBracket '['>}
                    {<-c>}
                    {<'/dev/md'> (${ Id.VSub_Name no) <.eli>}
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <geli>
                  more_env: []
                  words: [{<geli>} {<detach>} {<md> (${ Id.VSub_Name no) <.eli>}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
            (command.Simple
              blame_tok: <mdconfig>
              more_env: []
              words: [{<mdconfig>} {<-d>} {<-u>} {($ Id.VSub_DollarName no)}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <trap>
      more_env: []
      words: [{<trap>} {<geli_test_cleanup>} {<ABRT>} {<EXIT>} {<INT>} {<TERM>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [
        {<.>}
        {
          (CommandSub
            left_token: <Id.Left_Backtick '`'>
            child: 
              (command.Simple
                blame_tok: <dirname>
                more_env: []
                words: [{<dirname>} {($ Id.VSub_Number 0)}]
                redirects: []
                do_fork: T
              )
            right: <Id.Backtick_Right '`'>
          ) <'/../geom_subr.sh'>
        }
      ]
      redirects: []
      do_fork: T
    )
  ]
)