(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PATH)
          op: assign_op.Equal
          rhs: {(.) (Id.Lit_Other ':') ($ Id.VSub_DollarName '$PATH')}
          spids: [7]
        )
      ]
    )
    (command.ShFunction
      name: exceedsDaysInMonth
      body: 
        (command.BraceGroup
          children: [
            (command.Case
              to_match: 
                {
                  (command_sub
                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:35)
                    command_list: 
                      (command.CommandList
                        children: [
                          (command.Pipeline
                            children: [
                              (C {(echo)} {($ Id.VSub_Number '$1')})
                              (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'[:upper:]' span_id:43))} 
                                {(SQ (Token id:Id.Lit_Chars val:'[:lower:]' span_id:47))}
                              )
                            ]
                            negated: F
                          )
                        ]
                      )
                  )
                }
              arms: [
                (case_arm
                  pat_list: [{(jan) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [59]
                        )
                      ]
                    )
                  ]
                  spids: [54 57 62 -1]
                )
                (case_arm
                  pat_list: [{(feb) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(28)}
                          spids: [69]
                        )
                      ]
                    )
                  ]
                  spids: [64 67 72 -1]
                )
                (case_arm
                  pat_list: [{(mar) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [80]
                        )
                      ]
                    )
                  ]
                  spids: [75 78 83 -1]
                )
                (case_arm
                  pat_list: [{(apr) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(30)}
                          spids: [90]
                        )
                      ]
                    )
                  ]
                  spids: [85 88 93 -1]
                )
                (case_arm
                  pat_list: [{(may) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [101]
                        )
                      ]
                    )
                  ]
                  spids: [96 99 104 -1]
                )
                (case_arm
                  pat_list: [{(jun) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(30)}
                          spids: [111]
                        )
                      ]
                    )
                  ]
                  spids: [106 109 114 -1]
                )
                (case_arm
                  pat_list: [{(jul) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [122]
                        )
                      ]
                    )
                  ]
                  spids: [117 120 125 -1]
                )
                (case_arm
                  pat_list: [{(aug) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [132]
                        )
                      ]
                    )
                  ]
                  spids: [127 130 135 -1]
                )
                (case_arm
                  pat_list: [{(sep) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(30)}
                          spids: [143]
                        )
                      ]
                    )
                  ]
                  spids: [138 141 146 -1]
                )
                (case_arm
                  pat_list: [{(oct) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [153]
                        )
                      ]
                    )
                  ]
                  spids: [148 151 156 -1]
                )
                (case_arm
                  pat_list: [{(nov) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(30)}
                          spids: [164]
                        )
                      ]
                    )
                  ]
                  spids: [159 162 167 -1]
                )
                (case_arm
                  pat_list: [{(dec) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:days)
                          op: assign_op.Equal
                          rhs: {(31)}
                          spids: [174]
                        )
                      ]
                    )
                  ]
                  spids: [169 172 177 -1]
                )
                (case_arm
                  pat_list: [{(Id.Lit_Star '*')}]
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          words: [
                            {(echo)}
                            {
                              (DQ ($ Id.VSub_Number '$0') (': Unknown month name ') 
                                ($ Id.VSub_Number '$1')
                              )
                            }
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:192)
                              fd: -1
                              arg_word: {(2)}
                            )
                          ]
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:194)
                    )
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Exit val:exit span_id:196)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [180 182 -1 201]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Number '$2')} {(-lt)} {(1)} {(-o)} 
                          {($ Id.VSub_Number '$2')} {(-gt)} {($ Id.VSub_DollarName '$days')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:224)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:229)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [204 226]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:237)
                  arg_word: {(0)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: isLeapYear
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:year)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [292]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (DQ 
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Percent
                                    left: 
                                      (arith_expr.VarRef
                                        token: (Token id:Id.Lit_ArithVarLike val:year span_id:302)
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 4)})
                                  )
                              )
                            )
                          } {(-ne)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:317)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:322)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [296 319]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (DQ 
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Percent
                                    left: 
                                      (arith_expr.VarRef
                                        token: (Token id:Id.Lit_ArithVarLike val:year span_id:336)
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 400)})
                                  )
                              )
                            )
                          } {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:351)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:356)
                      arg_word: {(0)}
                    )
                  ]
                  spids: [330 353]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} 
                          {
                            (DQ 
                              (word_part.ArithSub
                                anode: 
                                  (arith_expr.Binary
                                    op_id: Id.Arith_Percent
                                    left: 
                                      (arith_expr.VarRef
                                        token: (Token id:Id.Lit_ArithVarLike val:year span_id:370)
                                      )
                                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)})
                                  )
                              )
                            )
                          } {(-eq)} {(0)} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:385)
                    )
                  ]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Return val:return span_id:390)
                      arg_word: {(1)}
                    )
                  ]
                  spids: [364 387]
                )
              ]
              else_action: [
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:398)
                  arg_word: {(0)}
                )
              ]
            )
          ]
        )
    )
  ]
)