code: func (c *Client) Step(in []byte) bool {
  	c.out.Reset()
  	if c.step > 2 || c.err != nil {
  		return false
  	}
  	c.step++
  	switch c.step {
  	case 1:
  		c.err = c.step1(in)
  	case 2:
  		c.err = c.step2(in)
  	case 3:
  		c.err = c.step3(in)
  	}
  	return c.step > 2 || c.err != nil
  }
docs: // Step processes the incoming data from the server and makes the
  // next round of data for the server available via Client.Out.
  // Step returns false if there are no errors and more data is
  // still expected.