code: func Monotonic(entropy io.Reader, inc uint64) *MonotonicEntropy {
  	m := MonotonicEntropy{
  		Reader: bufio.NewReader(entropy),
  		inc:    inc,
  	}
  
  	if m.inc == 0 {
  		m.inc = math.MaxUint32
  	}
  
  	if rng, ok := entropy.(*rand.Rand); ok {
  		m.rng = rng
  	}
  
  	return &m
  }
docs: // Monotonic returns an entropy source that is guaranteed to yield
  // strictly increasing entropy bytes for the same ULID timestamp.
  // On conflicts, the previous ULID entropy is incremented with a
  // random number between 1 and `inc` (inclusive).
  //
  // The provided entropy source must actually yield random bytes or else
  // monotonic reads are not guaranteed to terminate, since there isn't
  // enough randomness to compute an increment number.
  //
  // When `inc == 0`, it'll be set to a secure default of `math.MaxUint32`.
  // The lower the value of `inc`, the easier the next ULID within the
  // same millisecond is to guess. If your code depends on ULIDs having
  // secure entropy bytes, then don't go under this default unless you know
  // what you're doing.
  //
  // The returned type isn't safe for concurrent use.