code: func (s *stream) readVarUint32() (uint32, error) {
  	var x, y uint32
  	for {
  		b, err := s.readByte()
  		if err != nil {
  			return 0, err
  		}
  		u := uint32(b)
  		x |= (u & 0x7F) << y
  		y += 7
  		if ((u & 0x80) == 0) || (y == 35) {
  			break
  		}
  	}
  
  	return x, nil
  }
docs: // readVarUint32 reads an unsigned 32-bit varint