anchor.diff:  end;
   
   procedure MakeMinimalPerfectHashTable(const StringIntegerPairHashMap:TFLREStringIntegerPairHashMap;const HashTableName:ansistring);
  - function HashFromString(d:longword;const s:TFLRERawByteString):longword;
  + function HashFromString(Seed:longword;const s:TFLRERawByteString):longword;
    var i:longint;
    begin
  -  if d=0 then begin
  +  if Seed=0 then begin
      result:=$811c9dc5;
     end else begin
  -   result:=d;
  -  end;
  -  for i:=0 to length(s)-1 do begin
  -   inc(result,(result shl 1)+(result shl 4)+(result shl 7)+(result shl 8)+(result shl 24));
  -   result:=result xor byte(TFLRERawByteChar(s[i]));
  -  end;
  -  result:=(result shr 1) and $7fffffff;
  +   result:=Seed;
  +  end;
  +  for i:=1 to length(s) do begin
  +   result:=(result+(result shl 1)+(result shl 4)+(result shl 7)+(result shl 8)+(result shl 24)) xor byte(TFLRERawByteChar(s[i]));
  +  end;
  +  result:=result and $7fffffff;
    end;
   type PHashBucketItem=^THashBucketItem;
        THashBucketItem=record
  
positive.code:      if Bucket^.Count>length(Bucket^.Items) then begin
        SetLength(Bucket^.Items,Bucket^.Count*2);
       end;
  
      end;
     end;
    end;
   finally
    SetLength(Buckets,0);
   end;
  end;
  
  
negative.code:       Count:longint;
       end;
       THashBuckets=array of THashBucket;
  var Index,Size,HashValue,OldCount,SubIndex,CountBuckets,TempInteger,BucketIndex,ItemIndex,SlotIndex,CountSlots,FreeListSize,
      Seed:longint;
      Buckets:THashBuckets;
      Bucket:PHashBucket;
      BucketItem:PHashBucketItem;
      TempPointer:pointer;
      Used:array of boolean;
      Values:array of PHashBucketItem;
      Slots:array of longint;
      Seeds:array of longint;
      FreeList:array of longint;
  begin
   Buckets:=nil;
   CountBuckets:=0;
   Used:=nil;
   Values:=nil;
   Slots:=nil;
   Seeds:=nil;
   FreeList:=nil;
   try
  
    Size:=0;
    for Index:=0 to length(StringIntegerPairHashMap.EntityToCellIndex)-1 do begin
     if StringIntegerPairHashMap.EntityToCellIndex[Index]>=0 then begin
      inc(Size);
     end;
    end;
  
    if Size>0 then begin
  
     for Index:=0 to length(StringIntegerPairHashMap.EntityToCellIndex)-1 do begin
      if StringIntegerPairHashMap.EntityToCellIndex[Index]>=0 then begin
       HashValue:=longint(HashFromString(0,StringIntegerPairHashMap.Entities[Index].Key)) mod Size;
  