anchor.diff:      FReference : TObject;
       FOwnsReference : boolean;
     public
  -    constructor Create;
  +    constructor Create(const aFractionalPartDigits : byte);
       destructor Destroy; override;
       function CompareTo (aOther : TmUprightEvent) : integer;
       function GetValue (const aIndex : byte) : TNullableDouble;
  
positive.code:       MergeSort(tmpLimits, OnCompareEvents);
      end;
  
  
  
      for i := 0 to MAX_NUM_OF_VALUES -1 do
      begin
        lastValues[i] := 0;
        currentLimitIndex[i]:= -1;
      end;
  
      for i := 0 to FDataList.Count -1 do
      begin
        tmpDatum:= TmUprightDatum(FDataList.Items[i]);
  
        for k := 0 to MAX_NUM_OF_VALUES -1 do
        begin
          if (tmpLimits.Count > currentLimitIndex[k] + 1) then
          begin
            tmpEvent := TmUprightEvent(tmpLimits.Items[currentLimitIndex[k] + 1]);
            while Assigned(tmpEvent) and (tmpEvent.GetValue(k).NotNull) and (DoubleIsLessThan(tmpEvent.EventDate, tmpDatum.FEvent.EventDate) or (DoublesAreEqual(tmpEvent.EventDate, tmpDatum.FEvent.EventDate))) do
            begin
              inc(currentLimitIndex[k]);
              if (tmpLimits.Count > currentLimitIndex[k] + 1) then
                tmpEvent := TmUprightEvent(tmpLimits.Items[currentLimitIndex[k] + 1])
              else
                tmpEvent := nil;
            end;
          end;
        end;
        tmpDatum.FKey.FPosition := i + 1;
        for k := 0 to MAX_NUM_OF_VALUES - 1 do
        begin
          tmpDatum.SetUpright(k, lastValues[k] + tmpDatum.FEvent.GetValue(k).AsFloat);
          lastValues[k] := tmpDatum.GetUpright(k);
        end;
  
        for k := 0 to MAX_NUM_OF_VALUES - 1 do
        begin
          if currentLimitIndex[k] >= 0 then
          begin
            tmpEvent := TmUprightEvent(tmpLimits.Items[currentLimitIndex[k]]);
            tmpDatum.FLimits[k].Assign(tmpEvent.GetValue(k));
            tmpDatum.FRemainings[k].Value := tmpDatum.FLimits[k].AsFloat + tmpDatum.GetUpright(k);
          end;
        end;
      end;
  
negative.code:     idxMax[k] := -1;
    end;
  
    for i := 0 to FDataList.Count -1 do
    begin
      tmp:= TmUprightDatum(FDataList.Items[i]);
      for k := 0 to MAX_NUM_OF_VALUES -1 do
      begin
        tmp.FHighlights[k] := uhNone;
        if not mFloatsManagement.DoubleIsLessThan(tmpMin[k], tmp.GetUpright(k).AsFloat) then
        begin
          tmpMin[k] := tmp.GetUpright(k).AsFloat;
          idxMin[k] := i;
        end;
        if mFloatsManagement.DoubleIsLessThan(tmpMax[k], tmp.GetUpright(k).AsFloat) then
        begin
          tmpMax[k] := tmp.GetUpright(k).AsFloat;
          idxMax[k] := i;
        end;
      end;
  