(command.CommandList
  children: [
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName NO_SVN_TESTS))}]
                  redirects: []
                  do_fork: T
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git svn tests, NO_SVN_TESTS defined'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [5 15]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      negated: <Id.KW_Bang '!'>
                      children: [
                        (command.Simple
                          blame_tok: <test_have_prereq>
                          more_env: []
                          words: [{<test_have_prereq>} {<PERL>}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git svn tests, perl not available'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [28 37]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_DIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_DIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_DIR='> name:GIT_DIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName PWD) <'/.git'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_SVN_DIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_SVN_DIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_SVN_DIR='> name:GIT_SVN_DIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName GIT_DIR) <'/svn/refs/remotes/git-svn'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'SVN_TREE='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'SVN_TREE='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SVN_TREE='> name:SVN_TREE)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName GIT_SVN_DIR) <'/svn-tree'>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <svn>
      more_env: []
      words: [{<svn>}]
      redirects: [
        (Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'/dev/null'>})
        (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
      ]
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-ne>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git svn tests, svn not found'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [72 82]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'svnrepo='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'svnrepo='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'svnrepo='> name:svnrepo)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName PWD) <'/svnrepo'>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<svnrepo>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'svnconf='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'svnconf='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'svnconf='> name:svnconf)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName PWD) <'/svnconf'>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<svnconf>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <perl>
      more_env: []
      words: [
        {<perl>}
        {<-w>}
        {<-e>}
        {
          (DQ <'\n'> <'use SVN::Core;\n'> <'use SVN::Repos;\n'> 
            (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'SVN::Core::VERSION gt \'1.1.0\' or exit(42);\n'> <'system(qw/svnadmin create --fs-type fsfs/, '> 
            (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'ENV{svnrepo}) == 0 or exit(41);\n'>
          )
        }
      ]
      redirects: [
        (Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<3>})
        (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<4>})
      ]
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'x='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'x='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'x='> name:x)
          op: assign_op.Equal
          rhs: {($ Id.VSub_QMark '?')}
        )
      ]
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_DollarName x)} {<-ne>} {<0>}]
                  redirects: []
                  do_fork: T
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {($ Id.VSub_DollarName x)} {<-eq>} {<42>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'skip_all='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'skip_all='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                          op: assign_op.Equal
                          rhs: {(SQ <'Perl SVN libraries must be >= 1.1.0'>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [152 163]
                )
                (IfArm
                  keyword: <Id.KW_Elif elif>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [{<test>} {($ Id.VSub_DollarName x)} {<-eq>} {<41>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'skip_all='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'skip_all='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                          op: assign_op.Equal
                          rhs: {(SQ <'svnadmin failed to create fsfs repository'>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [172 183]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'skip_all='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'skip_all='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                      op: assign_op.Equal
                      rhs: {(SQ <'Perl SVN libraries not found or unusable'>)}
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [139 149]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'rawsvnrepo='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'rawsvnrepo='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'rawsvnrepo='> name:rawsvnrepo)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName svnrepo))}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'svnrepo='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'svnrepo='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'svnrepo='> name:svnrepo)
          op: assign_op.Equal
          rhs: {(DQ <'file://'> ($ Id.VSub_DollarName svnrepo))}
        )
      ]
      redirects: []
    )
    (command.ShFunction
      name_tok: <poke>
      name: poke
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <test-chmtime>
              more_env: []
              words: [{<test-chmtime>} {<Id.Lit_Other '+'> <1>} {(DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <svn_cmd>
      name: svn_cmd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <Id.Lit_LBracket '['>
                  more_env: []
                  words: [
                    {<Id.Lit_LBracket '['>}
                    {<-d>}
                    {(DQ ($ Id.VSub_DollarName svnconf))}
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <mkdir>
                  more_env: []
                  words: [{<mkdir>} {(DQ ($ Id.VSub_DollarName svnconf))}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'orig_svncmd='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'orig_svncmd='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'orig_svncmd='> name:orig_svncmd)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number 1))}
                    )
                  ]
                  redirects: []
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-z>}
                                {(DQ ($ Id.VSub_DollarName orig_svncmd))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <svn>
                      more_env: []
                      words: [{<svn>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [285 298]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <svn>
              more_env: []
              words: [
                {<svn>}
                {(DQ ($ Id.VSub_DollarName orig_svncmd))}
                {<--config-dir>}
                {(DQ ($ Id.VSub_DollarName svnconf))}
                {(DQ ($ Id.VSub_At '@'))}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <maybe_start_httpd>
      name: maybe_start_httpd
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'loc='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'loc='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'loc='> name:loc)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Number 1>
                        var_name: 1
                        suffix_op: (suffix_op.Unary op:<Id.VTest_Hyphen _> arg_word:{<svn>})
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_tristate>
              more_env: []
              words: [{<test_tristate>} {<GIT_SVN_TEST_HTTPD>}]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{($ Id.VSub_DollarName GIT_SVN_TEST_HTTPD)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <true>
                  pattern: (pat.Words words:[{<true>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <.>
                      more_env: []
                      words: [{<.>} {(DQ ($ Id.VSub_DollarName TEST_DIRECTORY)) <'/lib-httpd.sh'>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'LIB_HTTPD_SVN='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'LIB_HTTPD_SVN='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'LIB_HTTPD_SVN='>
                              name: LIB_HTTPD_SVN
                            )
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName loc))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <start_httpd>
                      more_env: []
                      words: [{<start_httpd>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShFunction
                      name_tok: <stop_httpd>
                      name: stop_httpd
                      body: 
                        (BraceGroup
                          left: <Id.Lit_LBrace '{'>
                          children: [
                            (command.Simple
                              blame_tok: <Id.Lit_Colon ':'>
                              more_env: []
                              words: [{<Id.Lit_Colon ':'>} {<noop>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          redirects: []
                          right: <Id.Lit_RBrace '}'>
                        )
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <convert_to_rev_db>
      name: convert_to_rev_db
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <perl>
              more_env: []
              words: [{<perl>} {<-w>} {<-->} {<->} {(DQ ($ Id.VSub_At '@'))}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: 
                        {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\E'> ch:E) <OF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'use strict;\n'>
                        <'@ARGV == 2 or die "usage: convert_to_rev_db <input> <output>";\n'>
                        <'open my $wr, \'+>\', $ARGV[1] or die "$!: couldn\'t open: $ARGV[1]";\n'>
                        <'open my $rd, \'<\', $ARGV[0] or die "$!: couldn\'t open: $ARGV[0]";\n'>
                        <'my $size = (stat($rd))[7];\n'>
                        <'($size % 24) == 0 or die "Inconsistent size: $size";\n'>
                        <'while (sysread($rd, my $buf, 24) == 24) {\n'>
                        <'\tmy ($r, $c) = unpack(\'NH40\', $buf);\n'>
                        <'\tmy $offset = $r * 41;\n'>
                        <'\tseek $wr, 0, 2 or die $!;\n'>
                        <'\tmy $pos = tell $wr;\n'>
                        <'\tif ($pos < $offset) {\n'>
                        <'\t\tfor (1 .. (($offset - $pos) / 41)) {\n'>
                        <'\t\t\tprint $wr ((\'0\' x 40),"\\n") or die $!;\n'>
                        <'\t\t}\n'>
                        <'\t}\n'>
                        <'\tseek $wr, $offset, 0 or die $!;\n'>
                        <'\tprint $wr $c,"\\n" or die $!;\n'>
                        <'}\n'>
                        <'close $wr or die $!;\n'>
                        <'close $rd or die $!;\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <require_svnserve>
      name: require_svnserve
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-z>} {(DQ ($ Id.VSub_DollarName SVNSERVE_PORT))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'skip_all='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'skip_all='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                          op: assign_op.Equal
                          rhs: {(SQ <'skipping svnserve test. (set $SVNSERVE_PORT to enable)'>)}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <test_done>
                      more_env: []
                      words: [{<test_done>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [467 478]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <start_svnserve>
      name: start_svnserve
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <svnserve>
                  more_env: []
                  words: [
                    {<svnserve>}
                    {<--listen-port>}
                    {($ Id.VSub_DollarName SVNSERVE_PORT)}
                    {<--root>}
                    {(DQ ($ Id.VSub_DollarName rawsvnrepo))}
                    {<--listen-once>}
                    {<--listen-host>}
                    {<127.0.0.1>}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Amp _>
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <prepare_a_utf8_locale>
      name: prepare_a_utf8_locale
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'a_utf8_locale='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'a_utf8_locale='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'a_utf8_locale='> name:a_utf8_locale)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.Simple
                                blame_tok: <locale>
                                more_env: []
                                words: [{<locale>} {<-a>}]
                                redirects: []
                                do_fork: T
                              )
                              (command.Simple
                                blame_tok: <sed>
                                more_env: []
                                words: [
                                  {<sed>}
                                  {<-n>}
                                  {(SQ <'/\\.[uU][tT][fF]-*8$/{\n'> <'\tp\n'> <'\tq\n'> <'}'>)}
                                ]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <test>
                          more_env: []
                          words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName a_utf8_locale))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <test_set_prereq>
                      more_env: []
                      words: [{<test_set_prereq>} {<UTF8>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [561 572]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <say>
                  more_env: []
                  words: [{<say>} {(DQ <'# UTF-8 locale not available, some tests are skipped'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
  ]
)