anchor.diff:  
          BitStateNFA:TFLREBitStateNFA;
   
  -       DFAGeneration:int64;
  -       DFAInstructionGenerations:TFLREInstructionGenerations;
  -
  -       DFAStackInstructions:TPFLREInstructions;
  -       DFAStateCache:TFLREDFAStateHashMap;
  -       DFAStates:array[0..6*3{skMax}] of PFLREDFAState;
  -       DFATemporaryState:TFLREDFAState;
  -       DFANewState:TFLREDFAState;
  -       DFACountStatesCached:longint;
  -       DFANextStatesSize:TFLREPtrInt;
  -       DFAStateSize:TFLREPtrInt;
  -       DFAStatePoolUsed:PFLREDFAStatePool;
  -       DFAStatePoolFree:PFLREDFAStatePool;
  -       DFAStatePoolSize:TFLREPtrUInt;
  -       DFAStatePoolSizePowerOfTwo:TFLREPtrUInt;
  +       DFA:TFLREDFA;
  +       ReversedDFA:TFLREDFA;
   
          constructor Create(AInstance:TFLRE);
          destructor Destroy; override;
  -
          function GetSatisfyFlags(const Position:longint):longword;
  -
          function GetDFAStartFlags(const Position:longint):longword;
  -
          function LookAssertion(const Position,WhichLookAssertionString:longint;const LookBehind,Negative:boolean):boolean;
  -
          function BackReferenceAssertion(const CaptureStart,CaptureEnd,BackReferenceStart,BackReferenceEnd:longint;const IgnoreCase:boolean):boolean;
  -
  -       function DFACacheState(const State:PFLREDFAState):PFLREDFAState; {$ifdef caninline}inline;{$endif}
  -       procedure DFAFastAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction);
  -       procedure DFAFullAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction;const Flags:longword);
  -       function DFAFastProcessNextState(State:PFLREDFAState;const CurrentChar:ansichar;const Reversed:boolean):PFLREDFAState;
  -       function DFAFullProcessNextState(State:PFLREDFAState;const Position:longint;const CurrentChar:longword;const Reversed:boolean):PFLREDFAState;
  -       procedure DFADestroyStatePool(var StatePool:PFLREDFAStatePool);
  -       procedure DFAFreeUsedStatePool;
  -       function DFAAllocateNewStatePool:PFLREDFAStatePool;
  -       function DFAGetState:PFLREDFAState;
  -       function DFATakeOverState(TakeOverFrom:PFLREDFAState):PFLREDFAState;
  -       procedure DFAFreeState(State:PFLREDFAState);
  -       procedure DFAReset;
  -
  -       function SearchMatchDFAFast(const StartPosition,UntilExcludingPosition:longint;out MatchEnd:longint;const UnanchoredStart:boolean):longint;
  -       function SearchMatchReversedDFAFast(const StartPosition,UntilIncludingPosition:longint;out MatchBegin:longint):longint;
  -       function SearchMatchDFAFull(const StartPosition,UntilExcludingPosition:longint;out MatchEnd:longint;const UnanchoredStart:boolean):longint;
  -       function SearchMatchReversedDFAFull(const StartPosition,UntilIncludingPosition:longint;out MatchBegin:longint):longint;
  -
        end;
   
        TFLRE=class
  
positive.code:  result:=false;
  (*)
   if DFAFast then begin
    case ThreadLocalStorageInstance.SearchMatchDFAFast(StartPosition,UntilExcludingPosition,MatchEnd,UnanchoredStart) of
     DFAMatch:begin
      if UnanchoredStart then begin
       // For unanchored searchs, we must do also a "backward" DFA search
       case ThreadLocalStorageInstance.SearchMatchReversedDFAFast(MatchEnd,StartPosition,MatchBegin) of
        DFAMatch:begin
         if MatchBegin<StartPosition then begin
          MatchBegin:=StartPosition;
  
negative.code:        function SearchMatch(var Captures:TFLRECaptures;const StartPosition,UntilExcludingPosition:longint;const UnanchoredStart:boolean):longint;
       end;
  
       TFLREDFA=class
        public
         Instance:TFLRE;
         ThreadLocalStorageInstance:TFLREThreadLocalStorageInstance;
         SearchLongest:longbool;
         Generation:int64;
         InstructionGenerations:TFLREInstructionGenerations;
         StackInstructions:TPFLREInstructions;
         StateCache:TFLREDFAStateHashMap;
         DefaultStates:array[0..6*3{skMax}] of PFLREDFAState;
         TemporaryState:TFLREDFAState;
         NewState:TFLREDFAState;
         CountStatesCached:longint;
         NextStatesSize:TFLREPtrInt;
         StateSize:TFLREPtrInt;
         StatePoolUsed:PFLREDFAStatePool;
         StatePoolFree:PFLREDFAStatePool;
         StatePoolSize:TFLREPtrUInt;
         StatePoolSizePowerOfTwo:TFLREPtrUInt;
         constructor Create(const AThreadLocalStorageInstance:TFLREThreadLocalStorageInstance);
         destructor Destroy; override;
         function CacheState(const State:PFLREDFAState):PFLREDFAState; {$ifdef caninline}inline;{$endif}
         procedure FastAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction);
         procedure FullAddInstructionThread(const State:PFLREDFAState;Instruction:PFLREInstruction;const Flags:longword);
         function FastProcessNextState(State:PFLREDFAState;const CurrentChar:ansichar;const Reversed:boolean):PFLREDFAState;
         function FullProcessNextState(State:PFLREDFAState;const Position:longint;const CurrentChar:longword;const Reversed:boolean):PFLREDFAState;
         procedure DestroyStatePool(var StatePool:PFLREDFAStatePool);
         procedure FreeUsedStatePool;
         function AllocateNewStatePool:PFLREDFAStatePool;
         function GetState:PFLREDFAState;
         function TakeOverState(TakeOverFrom:PFLREDFAState):PFLREDFAState;
         procedure FreeState(State:PFLREDFAState);
         procedure Reset;
         function SearchMatchFast(const StartPosition,UntilExcludingPosition:longint;out MatchEnd:longint;const UnanchoredStart:boolean):longint;
         function SearchMatchFastReversed(const StartPosition,UntilIncludingPosition:longint;out MatchBegin:longint):longint;
         function SearchMatchFull(const StartPosition,UntilExcludingPosition:longint;out MatchEnd:longint;const UnanchoredStart:boolean):longint;
         function SearchMatchFullReversed(const StartPosition,UntilIncludingPosition:longint;out MatchBegin:longint):longint;
       end;
  
       TFLREThreadLocalStorageInstance=class
        private
         AllNext:TFLREThreadLocalStorageInstance;
  