public bool TryFindPosition(byte[] value, out SequencePosition lastPosition) { if (value == null || value.Length == 0) { throw new ArgumentNullException(nameof(value)); } int valueLength = value.Length; if (valueLength == 1) { if (this.TryFindPosition(value[valueLength - 1], out lastPosition)) { lastPosition.Offet(1); } } SequencePosition startPosition = this.buffer.Start; while (true) { if (startPosition.GetInteger() >= this.buffer.End.GetInteger()) { break; } if (this.TryFindPosition(value[valueLength - 1], out var endPos)) { var tempEndPos = endPos.Offet(1); var startPos = this.GetStartPosition(ref tempEndPos, valueLength); var tempSequence = this.buffer.Slice(startPos, tempEndPos); if (this.VerifySequence(ref tempSequence, value)) { lastPosition = tempEndPos; return(true); } startPosition = tempEndPos; } } lastPosition = default; return(false); }