anchor.diff:    IterateLoggers(
       procedure (Logger : ILogger)
       begin
  -      //
  +      Logger.Log(Severity, Msg);
       end
     );
   end;
   
   procedure TMetaLogger.Log(Severity : TLogMsgSeverity; const Vals : array of const);
  -begin
  -  IterateLoggers(
  -    procedure (Logger : ILogger)
  -    begin
  -      //
  +var
  +  LVals : TArray<TVarRec>;
  +begin
  +  UnsafeCopyOpenArray<TVarRec>(Vals, LVals);
  +
  +  IterateLoggers(
  +    procedure (Logger : ILogger)
  +    begin
  +      Logger.Log(Severity, LVals);
       end
     );
   end;
   
   procedure TMetaLogger.LogFmt(Severity : TLogMsgSeverity; const Msg : String; const Args : array of const);
  -begin
  -  IterateLoggers(
  -    procedure (Logger : ILogger)
  -    begin
  -      //
  +var
  +  LArgs : TArray<TVarRec>;
  +begin
  +  UnsafeCopyOpenArray<TVarRec>(Args, LArgs);
  +
  +  IterateLoggers(
  +    procedure (Logger : ILogger)
  +    begin
  +      Logger.LogFmt(Severity, Msg, LArgs);
       end
     );
   end;
   
   procedure TMetaLogger.LogVal(Severity : TLogMsgSeverity; const Vals : array of TValue);
  -begin
  -  IterateLoggers(
  -    procedure (Logger : ILogger)
  -    begin
  -      //
  -    end
  -  );
  +var
  +  LVals : TArray<TValue>;
  +begin
  +  UnsafeCopyOpenArray<TValue>(Vals, LVals);
  +
  +  IterateLoggers(
  +    procedure (Logger : ILogger)
  +    begin
  +      Logger.LogVal(Severity, LVals);
  +    end
  +  );
  +end;
  +
  +procedure TMetaLogger.UnsafeCopyOpenArray<T>(const Source : array of T; var Dest : TArray<T>);
  +var
  +  i : Integer;
  +begin
  +  SetLength(Dest, Length(Source));
  +
  +  for i := 0 to High(Source) do
  +    Dest[i] := Source[i];
   end;
   
   procedure TMetaLogger.Warning(const Vals : array of const);
  -begin
  -  IterateLoggers(
  -    procedure (Logger : ILogger)
  -    begin
  -      //
  +var
  +  LVals : TArray<TVarRec>;
  +begin
  +  UnsafeCopyOpenArray<TVarRec>(Vals, LVals);
  +
  +  IterateLoggers(
  +    procedure (Logger : ILogger)
  +    begin
  +      Logger.Warning(LVals);
       end
     );
   end;
  
positive.code:   IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
  procedure TMetaLogger.LeaveSectionFmt(const Msg : String; const Args : array of const);
  begin
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
  procedure TMetaLogger.LeaveSectionVal(const Vals : array of TValue);
  begin
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
negative.code:   IterateLoggers(
      procedure (Logger : ILogger)
      begin
        Logger.LeaveMethod(AClass, MethodAddress, AResult);
      end
    );
  end;
  