anchor.diff:      exit;
      end;
     end;
  -  if (CaptureEnd=0) or (BackReferenceEnd=0) then begin
  -   exit;
  -  end;
  -  if IgnoreCase then begin
  -   if rfUTF8 in Instance.Flags then begin
  -    result:=true;
  -    CapturePosition:=CaptureStart;
  -    BackReferencePosition:=BackReferenceStart;
  -    while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
  -     if UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,CapturePosition))<>UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,BackReferencePosition)) then begin
  -      result:=false;
  -      exit;
  -     end;
  -    end;
  -   end else begin
  -    if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
  -     result:=true;
  -     CapturePosition:=CaptureStart;
  -     BackReferencePosition:=BackReferenceStart;
  -     while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
  -      if UnicodeToLower(byte(ansichar(Input[CapturePosition])))<>UnicodeToLower(byte(ansichar(Input[BackReferencePosition]))) then begin
  -       result:=false;
  -       exit;
  -      end;
  -      inc(CapturePosition);
  -      inc(BackReferencePosition);
  -     end;
  -    end;
  -   end;
  -  end else begin
  -   if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
  -    result:=true;
  -    CapturePosition:=CaptureStart;
  -    BackReferencePosition:=BackReferenceStart;
  -    while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
  -     if Input[CapturePosition]<>Input[BackReferencePosition] then begin
  -      result:=false;
  -      exit;
  -     end;
  -     inc(CapturePosition);
  -     inc(BackReferencePosition);
  -    end;
  -   end;
  -  end;
  +  result:=BackReferenceAssertion(CaptureStart,CaptureEnd,BackReferenceStart,BackReferenceEnd,IgnoreCase);
    end;
   end;
   
  
positive.code: 
         function LookAssertion(const Position,WhichLookAssertionString:longint;const LookBehind,Negative:boolean):boolean;
  
         function ParallelNFAStateAllocate(const Count:longint;const SubMatchesBitmap,UsedCheckBitmapSize:longword):PFLREParallelNFAState; {$ifdef caninline}inline;{$endif}
         function ParallelNFAStateAcquire(const State:PFLREParallelNFAState):PFLREParallelNFAState; {$ifdef caninline}inline;{$endif}
         procedure ParallelNFAStateRelease(const State:PFLREParallelNFAState); {$ifdef caninline}inline;{$endif}
  
negative.code:  result:=result xor Negative;
  end;
  
  function TFLREThreadLocalStorageInstance.BackReferenceAssertion(const CaptureStart,CaptureEnd,BackReferenceStart,BackReferenceEnd:longint;const IgnoreCase:boolean):boolean;
  var CapturePosition,BackReferencePosition:longint;
  begin
   result:=false;
   if (CaptureStart>=0) and (CaptureEnd>0) and (BackReferenceStart>=0) and (BackReferenceEnd>0) then begin
    if IgnoreCase then begin
     if rfUTF8 in Instance.Flags then begin
      result:=true;
      CapturePosition:=CaptureStart;
      BackReferencePosition:=BackReferenceStart;
      while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
       if UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,CapturePosition))<>UnicodeToLower(UTF8PtrCodeUnitGetCharAndIncFallback(Input,InputLength,BackReferencePosition)) then begin
        result:=false;
        exit;
       end;
      end;
     end else begin
      if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
       result:=true;
       CapturePosition:=CaptureStart;
       BackReferencePosition:=BackReferenceStart;
       while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
        if UnicodeToLower(byte(ansichar(Input[CapturePosition])))<>UnicodeToLower(byte(ansichar(Input[BackReferencePosition]))) then begin
         result:=false;
         exit;
        end;
        inc(CapturePosition);
        inc(BackReferencePosition);
       end;
      end;
     end;
    end else begin
     if (CaptureEnd-CaptureStart)=(BackReferenceEnd-BackReferenceStart) then begin
      result:=true;
      CapturePosition:=CaptureStart;
      BackReferencePosition:=BackReferenceStart;
      while (CapturePosition<CaptureEnd) and (BackReferencePosition<BackReferenceEnd) do begin
       if Input[CapturePosition]<>Input[BackReferencePosition] then begin
        result:=false;
        exit;
       end;
       inc(CapturePosition);
       inc(BackReferencePosition);
      end;
     end;
    end;
   end;
  end;
  
  function TFLREThreadLocalStorageInstance.ParallelNFAStateAllocate(const Count:longint;const SubMatchesBitmap,UsedCheckBitmapSize:longword):PFLREParallelNFAState; {$ifdef caninline}inline;{$endif}
  begin
   if assigned(FreeParallelNFAStates) then begin
  