(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:min_slab_name_size) op:Equal rhs:{(11)} spids:[82])]
      spids: [82]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:xmin) op:Equal rhs:{(0)} spids:[85])]
      spids: [85]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:xmax) op:Equal rhs:{(0)} spids:[88])]
      spids: [88]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:width) op:Equal rhs:{(1500)} spids:[91])]
      spids: [91]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:height) op:Equal rhs:{(700)} spids:[94])]
      spids: [94]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:mode) op:Equal rhs:{(preprocess)} spids:[97])]
      spids: [97]
    )
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ ("Usage: [-s W,H] [-r MIN,MAX] [-t|-l] FILE1 [FILE2 ..]"))})
            (C {(echo)} {(DQ ("FILEs must contain 'slabinfo -X' samples"))})
            (C {(echo)} {(DQ ("-t \t\t\t- plot totals for FILE(s)"))})
            (C {(echo)} {(DQ ("-l \t\t\t- plot slabs stats for FILE(s)"))})
            (C {(echo)} {(DQ ("-s %d,%d\t\t- set image width and height"))})
            (C {(echo)} {(DQ ("-r %d,%d\t\t- use data samples from a given range"))})
          ]
          spids: [105]
        )
      spids: [101 104]
    )
    (FuncDef
      name: check_file_exist
      body: 
        (BraceGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(KW_Bang "!")} {(-f)} {(DQ ($ VSub_Number "$1"))} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ("File '") ($ VSub_Number "$1") ("' does not exist"))})
                    (C {(exit)} {(1)})
                  ]
                  spids: [-1 174]
                )
              ]
              spids: [-1 191]
            )
          ]
          spids: [156]
        )
      spids: [152 155]
    )
    (FuncDef
      name: do_slabs_plotting
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [205]
                )
              ]
              spids: [203]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:out_file) op:Equal spids:[211])]
              spids: [209]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:range)
                  op: Equal
                  rhs: {(DQ ("every ::") ($ VSub_Name "$xmin"))}
                  spids: [216]
                )
              ]
              spids: [214]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:xtic) op:Equal rhs:{(DQ )} spids:[225])]
              spids: [223]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:xtic_rotate)
                  op: Equal
                  rhs: {(DQ (norotate))}
                  spids: [232]
                )
              ]
              spids: [230]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:lines) op:Equal rhs:{(2000000)} spids:[240])]
              spids: [238]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:wc_lines) op:Equal spids:[246])]
              spids: [244]
            )
            (C {(check_file_exist)} {(DQ ($ VSub_Name "$file"))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out_file)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name "$file"))})]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [259 265]
                      )
                    }
                  spids: [258]
                )
              ]
              spids: [258]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_Name "$xmax")} {(-ne)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:range)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$range") ("::") ($ VSub_Name "$xmax"))}
                          spids: [284]
                        )
                      ]
                      spids: [284]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:lines)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithVarRef name:xmax)
                                    right: (ArithVarRef name:xmin)
                                  )
                                spids: [293 298]
                              )
                            }
                          spids: [292]
                        )
                      ]
                      spids: [292]
                    )
                  ]
                  spids: [-1 281]
                )
              ]
              spids: [-1 301]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:wc_lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [(C {(cat)} {(DQ ($ VSub_Name "$file"))}) (C {(wc)} {(-l)})]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [306 318]
                      )
                    }
                  spids: [305]
                )
              ]
              spids: [305]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-ne)} {(0)} {(Lit_Other "]")})
                            (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$wc_lines"))} {(-eq)} {(0)} 
                              {(Lit_Other "]")}
                            )
                          ]
                          op_id: Op_DPipe
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:wc_lines)
                          op: Equal
                          rhs: {($ VSub_Name "$lines")}
                          spids: [352]
                        )
                      ]
                      spids: [352]
                    )
                  ]
                  spids: [-1 349]
                )
              ]
              spids: [-1 356]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$wc_lines"))} {(-lt)} 
                          {(DQ ($ VSub_Name "$lines"))} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:lines)
                          op: Equal
                          rhs: {($ VSub_Name "$wc_lines")}
                          spids: [380]
                        )
                      ]
                      spids: [380]
                    )
                  ]
                  spids: [-1 377]
                )
              ]
              spids: [-1 384]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} 
                          {
                            (ArithSubPart
                              anode: 
                                (ArithBinary
                                  op_id: Arith_Slash
                                  left: (ArithVarRef name:width)
                                  right: (ArithVarRef name:lines)
                                )
                              spids: [392 399]
                            )
                          } {(-gt)} {($ VSub_Name "$min_slab_name_size")} {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:xtic)
                          op: Equal
                          rhs: {(DQ (":xtic(1)"))}
                          spids: [411]
                        )
                      ]
                      spids: [411]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:xtic_rotate)
                          op: Equal
                          rhs: {(90)}
                          spids: [417]
                        )
                      ]
                      spids: [417]
                    )
                  ]
                  spids: [-1 408]
                )
              ]
              spids: [-1 421]
            )
            (SimpleCommand
              words: [{(gnuplot)} {(-p)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("#!/usr/bin/env gnuplot\n") ("\n") ("set terminal png enhanced size ") 
                        ($ VSub_Name "$width") (",") ($ VSub_Name "$height") (" large\n") ("set output '") ($ VSub_Name "$out_file") (".png'\n") 
                        ("set autoscale xy\n") ("set xlabel 'samples'\n") ("set ylabel 'bytes'\n") 
                        ("set style histogram columnstacked title textcolor lt -1\n") ("set style fill solid 0.15\n") ("set xtics rotate ") ($ VSub_Name "$xtic_rotate") ("\n") 
                        ("set key left above Left title reverse\n") ("\n") ("plot ") (Right_DoubleQuote "\"") ($ VSub_Name "$file") (Right_DoubleQuote "\"") (" ") 
                        ($ VSub_Name "$range") (" u 2") ($ VSub_Name "$xtic") (" title 'SIZE' with boxes,") ("\t'' ") ($ VSub_Name "$range") 
                        (" u 3 title 'LOSS' with boxes\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [428]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ ($ VSub_Name "$out_file") (.png))})]
                  spids: [-1 480]
                )
              ]
              spids: [-1 491]
            )
          ]
          spids: [200]
        )
      spids: [196 199]
    )
    (FuncDef
      name: do_totals_plotting
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:gnuplot_cmd) op:Equal rhs:{(DQ )} spids:[505])]
              spids: [503]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:range)
                  op: Equal
                  rhs: {(DQ ("every ::") ($ VSub_Name "$xmin"))}
                  spids: [512]
                )
              ]
              spids: [510]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:file) op:Equal rhs:{(DQ )} spids:[521])]
              spids: [519]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_Name "$xmax")} {(-ne)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:range)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$range") ("::") ($ VSub_Name "$xmax"))}
                          spids: [543]
                        )
                      ]
                      spids: [543]
                    )
                  ]
                  spids: [-1 540]
                )
              ]
              spids: [-1 551]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name t_files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [562 567]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(check_file_exist)} {(DQ ($ VSub_Name "$i"))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:file)
                          op: Equal
                          rhs: 
                            {(DQ ($ VSub_Name "$file")) 
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(basename)} {(DQ ($ VSub_Name "$i"))})]
                                  )
                                left_token: <Left_Backtick "`">
                                spids: [586 592]
                              )
                            }
                          spids: [582]
                        )
                      ]
                      spids: [582]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:gnuplot_cmd)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$gnuplot_cmd") (" '") ($ VSub_Name "$i") ("' ") 
                                ($ VSub_Name "$range") (" using 1 title") ("\t\t\t'") ($ VSub_Name "$i") (" Memory usage' with lines,")
                              )
                            }
                          spids: [595]
                        )
                      ]
                      spids: [595]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:gnuplot_cmd)
                          op: Equal
                          rhs: 
                            {
                              (DQ ($ VSub_Name "$gnuplot_cmd") (" '' ") ($ VSub_Name "$range") 
                                (" using 2 title ") ("\t\t\t'") ($ VSub_Name "$i") (" Loss' with lines,")
                              )
                            }
                          spids: [610]
                        )
                      ]
                      spids: [610]
                    )
                  ]
                  spids: [571 623]
                )
              spids: [560 569]
            )
            (SimpleCommand
              words: [{(gnuplot)} {(-p)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("#!/usr/bin/env gnuplot\n") ("\n") ("set terminal png enhanced size ") 
                        ($ VSub_Name "$width") (",") ($ VSub_Name "$height") (" large\n") ("set autoscale xy\n") ("set output '") ($ VSub_Name "$file") 
                        (".png'\n") ("set xlabel 'samples'\n") ("set ylabel 'bytes'\n") ("set key left above Left title reverse\n") ("\n") 
                        ("plot ") ($ VSub_Name "$gnuplot_cmd") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [630]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(echo)} {(DQ ($ VSub_Name "$file") (.png))})]
                  spids: [-1 667]
                )
              ]
              spids: [-1 678]
            )
          ]
          spids: [500]
        )
      spids: [496 499]
    )
    (FuncDef
      name: do_preprocess
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:out) op:Equal spids:[692])]
              spids: [690]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:lines) op:Equal spids:[697])]
              spids: [695]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:in)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [702]
                )
              ]
              spids: [700]
            )
            (C {(check_file_exist)} {(DQ ($ VSub_Name "$in"))})
            (C {(let)} {(Lit_VarLike "lines=") (3)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name "$in"))})]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [726 732]
                      ) (DQ (-slabs-by-loss))
                    }
                  spids: [725]
                )
              ]
              spids: [725]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name "$in"))})
                            (C {(grep)} {(-A)} {(DQ ($ VSub_Name "$lines"))} 
                              {(SQ <"Slabs sorted by loss">)}
                            )
                            (C {(egrep)} {(-iv)} {(SQ <"\\-\\-|Name|Slabs">)})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <"{print $1\" \"$4+$2*$3\" \"$4}">)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name "$out"))}
                                  spids: [779]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_Backtick "`">
                  spids: [738 784]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name "$out"))})]
                  spids: [-1 800]
                )
              ]
              spids: [-1 810]
            )
            (C {(let)} {(Lit_VarLike "lines=") (3)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name "$in"))})]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [821 827]
                      ) (DQ (-slabs-by-size))
                    }
                  spids: [820]
                )
              ]
              spids: [820]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name "$in"))})
                            (C {(grep)} {(-A)} {(DQ ($ VSub_Name "$lines"))} 
                              {(SQ <"Slabs sorted by size">)}
                            )
                            (C {(egrep)} {(-iv)} {(SQ <"\\-\\-|Name|Slabs">)})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <"{print $1\" \"$4\" \"$4-$2*$3}">)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name "$out"))}
                                  spids: [874]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_Backtick "`">
                  spids: [833 879]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name "$out"))})]
                  spids: [-1 895]
                )
              ]
              spids: [-1 905]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:out)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ ($ VSub_Name "$in"))})]
                          )
                        left_token: <Left_Backtick "`">
                        spids: [910 916]
                      ) (DQ (-totals))
                    }
                  spids: [909]
                )
              ]
              spids: [909]
            )
            (C 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {(cat)} {(DQ ($ VSub_Name "$in"))})
                            (C {(grep)} {(DQ ("Memory used"))})
                            (SimpleCommand
                              words: [{(awk)} {(SQ <"{print $3\" \"$7}">)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(DQ ($ VSub_Name "$out"))}
                                  spids: [946]
                                )
                              ]
                            )
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_Backtick "`">
                  spids: [922 951]
                )
              }
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {($ VSub_QMark "$?")} {(-eq)} {(0)} {(Lit_Other "]")})
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C 
                      {(t_files) (Lit_Other "[") (0) (Lit_Other "]") (Lit_Other "=") 
                        ($ VSub_Name "$out")
                      }
                    )
                    (C {(do_totals_plotting)})
                  ]
                  spids: [-1 967]
                )
              ]
              spids: [-1 981]
            )
          ]
          spids: [687]
        )
      spids: [683 686]
    )
    (FuncDef
      name: parse_opts
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:opt) op:Equal spids:[995])]
              spids: [993]
            )
            (While
              cond: [
                (Sentence
                  child: (C {(getopts)} {(DQ ("tlr::s::h"))} {(opt)})
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {($ VSub_Name "$opt")}
                      arms: [
                        (case_arm
                          pat_list: [{(t)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:mode)
                                  op: Equal
                                  rhs: {(totals)}
                                  spids: [1024]
                                )
                              ]
                              spids: [1024]
                            )
                          ]
                          spids: [1020 1021 1028 -1]
                        )
                        (case_arm
                          pat_list: [{(l)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:mode)
                                  op: Equal
                                  rhs: {(slabs)}
                                  spids: [1035]
                                )
                              ]
                              spids: [1035]
                            )
                          ]
                          spids: [1031 1032 1039 -1]
                        )
                        (case_arm
                          pat_list: [{(s)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:array)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArrayLiteralPart
                                        words: [
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name OPTARG>
                                              suffix_op: 
                                                (PatSub
                                                  pat: {(",")}
                                                  replace: {(" ")}
                                                  do_all: True
                                                  do_prefix: False
                                                  do_suffix: False
                                                )
                                              spids: [1048 1055]
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [1046]
                                )
                              ]
                              spids: [1046]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:width)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [1060 1065]
                                      )
                                    }
                                  spids: [1059]
                                )
                              ]
                              spids: [1059]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:height)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                        spids: [1069 1074]
                                      )
                                    }
                                  spids: [1068]
                                )
                              ]
                              spids: [1068]
                            )
                          ]
                          spids: [1042 1043 1077 -1]
                        )
                        (case_arm
                          pat_list: [{(r)}]
                          action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:array)
                                  op: Equal
                                  rhs: 
                                    {
                                      (ArrayLiteralPart
                                        words: [
                                          {
                                            (BracedVarSub
                                              token: <VSub_Name OPTARG>
                                              suffix_op: 
                                                (PatSub
                                                  pat: {(",")}
                                                  replace: {(" ")}
                                                  do_all: True
                                                  do_prefix: False
                                                  do_suffix: False
                                                )
                                              spids: [1086 1093]
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [1084]
                                )
                              ]
                              spids: [1084]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:xmin)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 0)}))
                                        spids: [1098 1103]
                                      )
                                    }
                                  spids: [1097]
                                )
                              ]
                              spids: [1097]
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:xmax)
                                  op: Equal
                                  rhs: 
                                    {
                                      (BracedVarSub
                                        token: <VSub_Name array>
                                        bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                        spids: [1107 1112]
                                      )
                                    }
                                  spids: [1106]
                                )
                              ]
                              spids: [1106]
                            )
                          ]
                          spids: [1080 1081 1115 -1]
                        )
                        (case_arm
                          pat_list: [{(h)}]
                          action: [(C {(usage)}) (C {(exit)} {(0)})]
                          spids: [1118 1119 1130 -1]
                        )
                        (case_arm
                          pat_list: [{(EscapedLiteralPart token:<Lit_EscapedChar "\\?">)}]
                          action: [
                            (SimpleCommand
                              words: [{(echo)} {(DQ ("Invalid option: -") ($ VSub_Name "$OPTARG"))}]
                              redirects: [
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: -1
                                  arg_word: {(2)}
                                  spids: [1144]
                                )
                              ]
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [1133 1134 1153 -1]
                        )
                        (case_arm
                          pat_list: [{(Lit_Other ":")}]
                          action: [
                            (SimpleCommand
                              words: [
                                {(echo)}
                                {(DQ (-) ($ VSub_Name "$OPTARG") (" requires an argument."))}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: -1
                                  arg_word: {(2)}
                                  spids: [1168]
                                )
                              ]
                            )
                            (C {(exit)} {(1)})
                          ]
                          spids: [1156 1157 1177 -1]
                        )
                      ]
                      spids: [1013 1017 1180]
                    )
                  ]
                  spids: [1010 1183]
                )
            )
            (ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {($ VSub_Name "$OPTIND")}
            )
          ]
          spids: [990]
        )
      spids: [986 989]
    )
    (FuncDef
      name: parse_args
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:idx) op:Equal rhs:{(0)} spids:[1203])]
              spids: [1201]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:p) op:Equal spids:[1209])]
              spids: [1207]
            )
            (ForEach
              iter_name: p
              iter_words: [{(DQ ($ VSub_At "$@"))}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Case
                      to_match: {($ VSub_Name "$mode")}
                      arms: [
                        (case_arm
                          pat_list: [{(preprocess)}]
                          action: [
                            (C 
                              {(files) (Lit_Other "[") ($ VSub_Name "$idx") (Lit_Other "]") 
                                (Lit_Other "=") ($ VSub_Name "$p")
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name "$idx") (Lit_Other "+") (1)}
                                  spids: [1246]
                                )
                              ]
                              spids: [1246]
                            )
                          ]
                          spids: [1234 1235 1252 -1]
                        )
                        (case_arm
                          pat_list: [{(totals)}]
                          action: [
                            (C 
                              {(t_files) (Lit_Other "[") ($ VSub_Name "$idx") (Lit_Other "]") 
                                (Lit_Other "=") ($ VSub_Name "$p")
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name "$idx") (Lit_Other "+") (1)}
                                  spids: [1267]
                                )
                              ]
                              spids: [1267]
                            )
                          ]
                          spids: [1255 1256 1273 -1]
                        )
                        (case_arm
                          pat_list: [{(slabs)}]
                          action: [
                            (C 
                              {(files) (Lit_Other "[") ($ VSub_Name "$idx") (Lit_Other "]") 
                                (Lit_Other "=") ($ VSub_Name "$p")
                              }
                            )
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:idx)
                                  op: Equal
                                  rhs: {($ VSub_Name "$idx") (Lit_Other "+") (1)}
                                  spids: [1288]
                                )
                              ]
                              spids: [1288]
                            )
                          ]
                          spids: [1276 1277 1294 -1]
                        )
                      ]
                      spids: [1227 1231 1297]
                    )
                  ]
                  spids: [1224 1300]
                )
              spids: [1218 1222]
            )
          ]
          spids: [1198]
        )
      spids: [1194 1197]
    )
    (C {(parse_opts)} {(DQ ($ VSub_At "$@"))})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:argstart)
          op: Equal
          rhs: {($ VSub_QMark "$?")}
          spids: [1311]
        )
      ]
      spids: [1311]
    )
    (C {(parse_args)} 
      {
        (DQ 
          (BracedVarSub
            token: <VSub_At "@">
            suffix_op: (Slice begin:(ArithWord w:{($ VSub_Name "$argstart")}))
            spids: [1317 1321]
          )
        )
      }
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (AndOr
                  children: [
                    (C {(Lit_Other "[")} 
                      {
                        (BracedVarSub
                          token: <VSub_Name files>
                          prefix_op: VSub_Pound
                          bracket_op: (WholeArray op_id:Lit_At)
                          spids: [1329 1335]
                        )
                      } {(-eq)} {(0)} {(Lit_Other "]")}
                    )
                    (C {(Lit_Other "[")} 
                      {
                        (BracedVarSub
                          token: <VSub_Name t_files>
                          prefix_op: VSub_Pound
                          bracket_op: (WholeArray op_id:Lit_At)
                          spids: [1347 1353]
                        )
                      } {(-eq)} {(0)} {(Lit_Other "]")}
                    )
                  ]
                  op_id: Op_DAmp
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(usage)}) (C {(exit)} {(1)})]
          spids: [-1 1362]
        )
      ]
      spids: [-1 1372]
    )
    (Case
      to_match: {($ VSub_Name "$mode")}
      arms: [
        (case_arm
          pat_list: [{(preprocess)}]
          action: [
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1393 1398]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [(C {(do_preprocess)} {(DQ ($ VSub_Name "$i"))})]
                  spids: [1402 1412]
                )
              spids: [1391 1400]
            )
          ]
          spids: [1382 1383 1415 -1]
        )
        (case_arm
          pat_list: [{(totals)}]
          action: [(C {(do_totals_plotting)})]
          spids: [1418 1419 1425 -1]
        )
        (case_arm
          pat_list: [{(slabs)}]
          action: [
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (DQ 
                    (BracedVarSub
                      token: <VSub_Name files>
                      bracket_op: (WholeArray op_id:Lit_At)
                      spids: [1439 1444]
                    )
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [(C {(do_slabs_plotting)} {(DQ ($ VSub_Name "$i"))})]
                  spids: [1448 1458]
                )
              spids: [1437 1446]
            )
          ]
          spids: [1428 1429 1461 -1]
        )
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [
            (SimpleCommand
              words: [{(echo)} {(DQ ("Unknown mode ") ($ VSub_Name "$mode"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[1475])]
            )
            (C {(usage)})
            (C {(exit)} {(1)})
          ]
          spids: [1464 1465 1487 -1]
        )
      ]
      spids: [1375 1379 1489]
    )
  ]
)