anchor.diff:  end;
   {$endif}
   
  +procedure MemorySwap(a,b:pointer;Size:longint);
  +var Temp:longint;
  +begin
  + while Size>=SizeOf(longint) do begin
  +  Temp:=longword(a^);
  +  longword(a^):=longword(b^);
  +  longword(b^):=Temp;
  +  inc(PtrUInt(a),SizeOf(longword));
  +  inc(PtrUInt(b),SizeOf(longword));
  +  dec(Size,SizeOf(longword));
  + end;
  + while Size>=SizeOf(byte) do begin
  +  Temp:=byte(a^);
  +  byte(a^):=byte(b^);
  +  byte(b^):=Temp;
  +  inc(PtrUInt(a),SizeOf(byte));
  +  inc(PtrUInt(b),SizeOf(byte));
  +  dec(Size,SizeOf(byte));
  + end;
  +end;
  +
   procedure DirectIntroSort(Items:pointer;Left,Right,ElementSize:longint;CompareFunc:TSortCompareFunction);
   type PByteArray=^TByteArray;
        TByteArray=array[0..$3fffffff] of byte;
  
positive.code:    end else begin
      if (Depth=0) or (ptruint(pointer(StackItem))>=ptruint(pointer(@Stack[high(Stack)-1]))) then begin
       // Heap sort
       Size:=(Right-Left)+1;
       i:=Size div 2;
       Temp:=nil;
       repeat
  
negative.code:        dec(i);
         Temp:=PPointers(Items)^[Left+i];
        end else begin
         dec(Size);
         if Size>0 then begin
          Temp:=PPointers(Items)^[Left+Size];
          PPointers(Items)^[Left+Size]:=PPointers(Items)^[Left];
         end else begin
          break;
         end;
        end;
        Parent:=i;
  