(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:biggest)
          op: assign_op.Equal
          rhs: {(100)}
          spids: [7]
        )
      ]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:guess) op:assign_op.Equal rhs:{(0)} spids:[13])]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:guesses)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [19]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:number)
          op: assign_op.Equal
          rhs: 
            {
              (word_part.ArithSub
                anode: 
                  (arith_expr.Binary
                    op_id: Id.Arith_Plus
                    left: 
                      (arith_expr.Binary
                        op_id: Id.Arith_Percent
                        left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$RANDOM')})
                        right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$biggest')})
                      )
                    right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                  )
              )
            }
          spids: [25]
        )
      ]
    )
    (C {(echo)} {(DQ ('Guess a number between 1 and ') ($ Id.VSub_DollarName '$biggest'))})
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:52)
      cond: [
        (command.Sentence
          child: 
            (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-ne)} 
              {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')}
            )
          terminator: (Token id:Id.Op_Semi val:';' span_id:66)
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.Sentence
              child: (C {(/bin/echo)} {(-n)} {(DQ ('Guess? '))})
              terminator: (Token id:Id.Op_Semi val:';' span_id:79)
            )
            (C {(read)} {(guess)})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-lt)} 
                          {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:100)
                    )
                  ]
                  action: [(C {(echo)} {(DQ ('... bigger!'))})]
                  spids: [86 102]
                )
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$guess'))} {(-gt)} 
                          {($ Id.VSub_DollarName '$number')} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:126)
                    )
                  ]
                  action: [(C {(echo)} {(DQ ('... smaller!'))})]
                  spids: [112 128]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:guesses)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (word_part.ArithSub
                        anode: 
                          (arith_expr.Binary
                            op_id: Id.Arith_Plus
                            left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$guesses')})
                            right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                          )
                      )
                    }
                  spids: [141]
                )
              ]
            )
          ]
        )
    )
    (C {(echo)} 
      {
        (DQ ('Right!! Guessed ') ($ Id.VSub_DollarName '$number') (' in ') 
          ($ Id.VSub_DollarName '$guesses') (' guesses.')
        )
      }
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:167) arg_word:{(0)})
  ]
)