anchor.diff:          let startIndex = startIndex - bufferFirstCharacterIndex |> int
           ReadOnlySpan(buffer, startIndex, length)
       override _.Dispose() =
  +        ArrayPool.Shared.Return buffer
           buffer <- null
           if not leaveOpen then
               reader.Dispose()
  
positive.code:             // We will then either return or expand the buffer again.
              nRead <> 0 && tryExpandPastIndex startingIndex idx
      override _.TryExpandPastIndex(startingIndex, idx) =
          tryExpandPastIndex startingIndex idx
      override _.LengthSoFar =
          checkDisposed()
  
negative.code:         if bufferSize <= 0 then
              raise <| ArgumentOutOfRangeException("bufferSize", bufferSize,
                  "The buffer size cannot be negative or zero.")
      let mutable buffer = ArrayPool.Shared.Rent bufferSize
      let mutable bufferFirstCharacterIndex = 0UL
      let mutable nextReadIndex = 0UL
      let checkDisposed() =
          if isNull buffer then
              raise <| ObjectDisposedException("Cannot use a dynamic block character stream after being disposed.")
      let growBuffer() =
          let newLength = buffer.Length * 2
          let bufferNew = ArrayPool.Shared.Rent newLength
          ReadOnlySpan(buffer).CopyTo(Span bufferNew)
          ArrayPool.Shared.Return(buffer)
          buffer <- bufferNew
      let getBufferContentLength() = nextReadIndex - bufferFirstCharacterIndex |> int
      let rec tryExpandPastIndex startingIndex idx =
          Debug.Assert(startingIndex >= bufferFirstCharacterIndex,
              "The starting index was behind the first character in the buffer.")
          Debug.Assert(idx >= startingIndex,
  