code: func (mt *MT19937) Read(p []byte) (n int, err error) {
  	n = len(p)
  	for len(p) >= 8 {
  		val := mt.Uint64()
  		p[0] = byte(val)
  		p[1] = byte(val >> 8)
  		p[2] = byte(val >> 16)
  		p[3] = byte(val >> 24)
  		p[4] = byte(val >> 32)
  		p[5] = byte(val >> 40)
  		p[6] = byte(val >> 48)
  		p[7] = byte(val >> 56)
  		p = p[8:]
  	}
  	if len(p) > 0 {
  		val := mt.Uint64()
  		for i := 0; i < len(p); i++ {
  			p[i] = byte(val)
  			val >>= 8
  		}
  	}
  	return n, nil
  }
docs: // Read fills `p` with (pseudo-)random bytes.  This method implements
  // the io.Reader interface.  The returned length `n` always equals
  // `len(p)` and `err` is always nil.