anchor.diff:    indexesSet: set of Byte;
   begin
     gLog.AddTime('Creating crash report...');
  -  attachedFilesStr := '';
   
     // Attempt to save the game, but if the state is too messed up it might fail
     gGame.SaveWorkerThreadHolder.Worker.fSynchronousExceptionMode := True; //Do saving synchronously in main thread
  
positive.code:   // which are not quite related to the Game's SRP
    TKMCrashReport = class
    private
       fExceptIntf: IMEException;
       fZipFile: UnicodeString;
    public
      constructor Create(const aExceptIntf: IMEException; const aZipFile: UnicodeString);
      procedure AttachEverything;
      class procedure Generate(const aExceptIntf: IMEException; const aZipFile: UnicodeString); static;
    end;
  
  
negative.code: end;
  
  
  procedure TKMCrashReport.AttachFile(const aFile: UnicodeString);
  begin
    if (aFile <> '') and FileExists(aFile) then
    begin
      if Pos(aFile, fAttachedFilesStr) = 0 then
      begin
        fAttachedFilesStr := fAttachedFilesStr + aFile + '; ';
        fExceptIntf.AdditionalAttachments.Add(aFile, '', fZipFile);
        gLog.AddTime('Attached file: ' + aFile);
      end
      else
        gLog.AddTime('File already attached: ' + aFile);
    end;
  end;
  
  
  procedure TKMCrashReport.AttachEverything;
    procedure AttachSaveFiles(const aFile: UnicodeString; aAttachRNG: Boolean = True);
    begin
      AttachFile(ChangeFileExt(aFile, EXT_SAVE_MAIN_DOT));
  